월간 데이콘 항공편 지연 예측 AI 경진대회

[토론, 질문] 저희 팀이 했던 부분 공유 해드립니다. ETA, DTA 부분

2023.05.05 21:47 1,474 조회

안녕하세요. 이제 슬슬 대회에 마지막이 다가 오고 있는데 코딩 실력의 부족함으로 인해서 생각하고 있는 것을 끝까지 못하게 될 것 같아

다른 분들에게 도움이라도 되고자 글을 씁니다.


우선 이번 대회에서 중요한 부분은 결측치를 채우는 것이라고 생각합니다.

하지만 delay를 제외한 결측치는 각 column들의 최대 10프로 밖에 되지 않는다는 것을 알 수 있습니다.

하지만 이걸 채우고 해도 성능이 잘 나오지 않음을 알 수 있습니다.


우선 저희 팀이 생각하는 feature들의 특성 중 'Estimated_Arrival_Time', 'Estimated_Departure_Time'에 대해 이야기하려고 합니다.


'Estimated_Arrival_Time', 'Estimated_Departure_Time'


Estimated_Departure_Time: 전산 시스템을 바탕으로 측정된 비행기의 출발 시간 (현지 시각, HH:MM 형식)

Estimated_Arrival_Time: 전산 시스템을 바탕으로 측정된 비행기의 도착 시간 (현지 시각, HH:MM 형식)


1.주어진 데이콘에서 설명한 데이터의 설명입니다.

측정된 비행기의 출발시간이라는 것은 실제로 비행기가 공항에서 출발한 시간이라는 의심을 사게 합니다.

이 부분에 대해서 질문을 드렸는데 측정된 시간이라고 하는군요.

https://dacon.io/competitions/official/236094/talkboard/408256?page=2&dtype=recent

예상시간 - 항공위키

https://airtravelinfo.kr/wiki/index.php?title=ETD(Estimated_Time_of_Departure)


하지만 실제로 출발한 시간이라고 한다면 매우 쉬운 문제가 될 것입니다.

같은 공항끼리 묶어서 비슷한 출발시간대보다 늦게 출발한다면 Delay라고 생각할 수 있지 않을까요?

하지만 밑의 표를 보시면 그건 아닌 것 같습니다. 735에 출발한 비행기를 보면 지연된 비행기와 지연되지 않은 비행기가 동시에 있군요!!

따라서 Estimated_Time은 예정 시간이라고 생각하고 문제를 접근하는게 맞는 것 같습니다.

이제 줄여서 ETA. ETD로 부르도록 하겠습니다.


2.두 번째로 생각할 수 있는 부분은 ETA, ETD가 현지시각을 기준으로 한다는 것입니다.

그래서 남은 결측치를 채우는데 일반적인 방법으로는 어렵지 않을까하는 생각이 됩니다. 하지만 시차를 외부에서 갖고오는 것은 대회 규칙에 어긋납니다.

그러면 시차를 어떻게 계산할 수 있을까요?


저희 팀이 생각한 방법은 ((ETD - ETA) - (ETA -ETD))/2를 하고 반올림하여 구하는 방법이였습니다.


물론 생각보다 너무 안돼서 놀랬습니다. ㅎㅎ....아마 예측하기로는 섬머타임때문에 타임테이블이 망가지지 않았나 의심해봅니다.

(섬머타임을 제외하고 할까 생각해봤지만 이 또한 외부 데이터 이용이 될 것 같아 그냥 하지 않았습니다.)


3.ETA와 ETD가 동시에 결측치인 것은 10000개의 불과하다.

90000개의 데이터는 둘 중 하나라도 있으니 아마 잘하면 채울 수 있지 않을까 합니다.

저희 팀은 거리를 이용해서 linear regression을 통해 채우는 방법을 이용했습니다.


다들 남은 기간 동안 유종의 미를 거두셨으면 좋겠습니다.

로그인이 필요합니다
0 / 1000
Soonb
2023.05.05 22:26

저도 이 부분을 제가 나름 합리적으로 채웠는데, 설명드리고 싶었는데 시간이 너무 짧았네요..ㅠ 댓글로라도 저는 이렇게 했습니다.
시간이 없어서, 제 코드 부분을 시각화나 사실 검증 없이 가설을 세우고 진행해서 따로 쓰긴 애매했네요.

3번 부분에 저는 이렇게 접근했습니다.
1. 저도 EAT, EDT가 둘다 결측치 인 10000개 정도의 값은 그냥 제거했습니다. 
 => 남은 것은 적어도 EAT, EDT가 있는 데이터만 남습니다.

2. 같은 Origin_Airport / Destination_Airport 를 가지면, estimated time이 같을 것이라는 전제하고 채웠습니다.
예를 들어, (인천 -> 오사카) 라는 운항은 걸리는 시간이 비슷할 것 이기 때문입니다.

3. 같은 (Origin_Airport, Destination_Airport)간에 EAT, EDT가 모두 존재한다면, 걸리는 시간을 평균내주었습니다.
이 때, 시차가 차이나도 상관없습니다. 어차피 (목적지, 도착지) 의 시차가 존재했다면 항상 시차가 존재하기 때문입니다.

4. EDT만 있는 데이터에는 (Origin_Airport, Destination_Airport)에 의해 (평균 걸리는 시간을 더해서) EAT를 구해주었습니다. 반대로 
EAT만 있는 데이터에는 평균 걸리는 시간을 빼서 EDT를 구해주었고요.
이 과정에서 음수가 발생할 수 있습니다. 이를 처리하기 위해서 저 같은 경우는 
1) 하루가 24시간 주기인 것을 감안하여, EAT, EDT에 대해 모든 A시B분을 총 60*A + B 분으로 바꿔주었습니다. 
2) 모든 덧셈 뺄셈에서 %1440 (하루는 24시간 = 1440분) 연산을 통해, 음수가 발생하지 않으면서 하루의 주기성을 바꾸지 않게 변경했습니다.

Linear Regression을 이용했다고 하는게 신기하네요! 나중에 시간되시면 어떤 방식으로 LR을 쓰셨는지 궁금합니다!