Flight delay prediction

2019-10-12

2019 빅콘테스트 퓨쳐스리그, “항공지연예측”에 참가하였다.

대회소개

항공운항에 있어 지연 및 결항은 여행자에게 굉장히 불쾌한 상황일 뿐만 아니라, 항공사에도 막대한 피해를 주는 문제이다. 모든 예측이 그렇듯 100% 정확할 순 없겠지만, 지연에 대한 예측이 성능이 높아질 수록 그로 인한 이익은 지수적으로 증가한다.

이번 대회는 2년간 국내 항공편 데이터를 바탕으로 지연 확률을 예측하는 대회였다.

2017.01-2019.06 데이터를 바탕으로 2019년 10월을 예측해야 했는데, 실제 대회 마감일은 9월이라 실제 “예측”을 한다는 점에서 꽤나 흥미로웠다.

Key Points

위에서 언급했듯이 2017년 1월부터 2019년 6월까지의 데이터에는 모든 항공편 정보 및 지연 여부가 담겨있었다. 대회 시작 후인 2019년 7월부터 2019년 9월까지의 데이터에는 예정된 항공 스케줄만 포함되어 있었다.

따라서 우리는 다음과 같이 데이터를 활용하였다.

  • 2017.01~2019.06: Train set
  • 2019.07~2019.09: Validation set
  • 2019.10: Test set

분석을 진행하며 중요하게 다룬 포인트들은 다음과 같다.


첫 번째: 종속변수의 불균형

Classification문제를 예측할 땐, 종속변수의 비율이 예측 성능에 영향을 끼친다. 즉, 예측하고자 하는 값에 1과 0이 적절히 섞여있어야 예측이 쉽다.

그러나 상식적으로 생각해보면, 항공편은 지연보단 정상출발의 경우가 훨씬 많다. 본 데이터에서도 우리가 잡아내고자 하는 “지연”의 경우의 수는 10%가 채 되지 않았다.

우리팀은 이 문제를 해결하기 위해 2가지 대안을 생각하였다.

  1. 종속변수의 비율이 맞게 Sampling한다.
  2. 알고리즘의 예측값 반환의 threshold를 낮추어, 지연을 더 보수적으로 잡아낸다.

충분한 논의 끝에 정보 손실율이 적은 두번째 대안을 선택하였다.

뿐만 아니라, 지연 사유에 있어서도 90%이상이 연결지연이라는 문제도 있었다. 이 부분에 대해선 뒤에서 다시 언급하도록 하겠다.

두 번째: 변수의 비식별화

항공사, 편명, 공항, 비행기 등록번호 등 예측에 중요하게 필요한 내용이 모두 암호화되어 있었다. 이 문제는 다음을 통해 해결하였다.

  • Base64 Decoder를 사용하여 마킹 해제
  • 일별 한국공항공사의 운행 데이터와 비교

세 번째: 날씨변수의 부재

연결지연을 제외하면, 대부분의 지연은 ‘날씨’와 관련이 깊다. 날씨는 예측 정보가 이미 존재하기 때문에, 잘 활용하면 모델의 예측력을 확연히 높여줄 수 있다.

그러나, 주어진 데이터에는 날씨와 관련된 정보가 존재하지 않았다. 따라서, 우리팀은 날씨 관련 변수를 크롤링해와 사용하였다.

항공기상청 자료를 우선 사용하되, 군사문제로 날씨 정보가 없는 7개 공항은 가장 가까운 관측소의 기상청 자료를 함께 사용하였다.

네번째: 지연 사유에 따른 분석

이번 대회의 핵심파트이다. 아마 여기서 분석의 창의성 및 순위가 결정되었을 것이라 생각한다. 우리팀의 논리는 다음과 같다.

비록 수상하진 못했지만, 충분히 설득력있는 논리라 생각한다.

위에서 언급했듯이, 90% 이상의 지연 사유는 연결지연이다. 연결지연이란, 앞선 항공기가 지연되어 다음 비행기가 연달아 지연되는 경우를 말한다. 따라서 연결지연을 예측할 땐, 앞선 항공편의 지연 여부가 중요 변수가 된다.

나머지 10%의 지연 사유는 날씨, 기체결함, 활주로 문제등이다. 이 각각의 사유는 우리가 제공받은 데이터를 바탕으로 예측할 수 있다. (앞으로 이들을 묶어 최초 지연이라 부르겠다)

이를 바탕으로 다음과 같은 결론을 도출하였다.

1. 연결지연과 최초 지연의 경우, 그 원인이 너무 다르기 때문에 따로 예측을 해야한다.

2. 어떠한 사유로 최초 지연이 발생하고 난 후 연결지연이 발생하기 때문에, 최초 지연을 예측한 후 이를 바탕으로 연결지연이 발생할 확률을 예측해야 한다.

1. 최초지연 예측

  • Weighted Ensemble을 통해 예측하였다. Weighted Ensemble이란, 기존 Bagging 기법에 착안하되 우리 팀의 분석 목적에 맞게 일부 수정한 알고리즘이다.
    • Stump가 아닌 Full-model을 쌓아올린다.
    • 각 Full-model의 성능이 좋을 수록, 가중치를 준다. 즉, 성능 좋은 base model이 최종 예측에 더 큰 목소리를 낸다.
    • 최종 예측을 할때, 다수결을 사용하는 Majority Voting 방법에서 확률을 사용하는 Soft Voting 방법으로 변경하였다. 이때, 앞서 말한대로 threshold를 낮추어 지연을 조금 더 보수적으로 잡아내도록 하였다.

2. 연결지연 예측

  • 어떤 비행기가 사용되는지 알고 있다면, 앞선 비행기의 지연 여부를 통해 연결지연을 꽤 정확히 예측할 수 있다. 그러나 안타깝게도 대부분의 항공사는 사용될 항공기를 사전에 공개하지 않는다.
    • 따라서 모든 항공기에 대해 특정 항공편에 사용될 확률, 그 항공편이 연결지연 될 확률을 모두 구해야 한다.
    • 이 확률을 최종적으로 계산해보면 Markov matrix의 행렬의 형태로 구할 수 있다.
  • 현 시점의 연결지연 여부는 오직 이전 시점의 지연에만 영향을 받아 Markov Property를 만족한다고 볼 수 있다.
  • 이때 구한 공항별 Markov matrix는 시간과 상관없이 constant한 transition matrix이다.
  • 연결지연은 최초지연 이후 연쇄적으로 일어난다.
  • 따라서 우리팀은 연결지연을 하나의 Markov Chain의 형태로 보았고, 이 아이디어를 바탕으로 예측을 하였다.

우리는 비행경로 및 거리등의 정보는 모두 동일하다고 가정하였다.


발표자료


개선할 점

연결지연 예측 모델

  • 연결지연 예측 모델을 만드는 아이디어는 꽤 괜찮았다고 생각하나, 이를 완벽히 공부하고 사용하지 못했다. 조금 더 이 분야에 대해 공부하고 적절히 사용했다면 더 좋은 결과가 있지 않았을까 하는 아쉬움이 남는다.

유레카!라고 생각했었는데, 이미 많은 선행 연구가 있었다. 역시 학문의 세계란 그 최전방에 서있기 정말 어려운 것 같다.

확률과정 문제라 생각했는데, 사후적으로 찾아보니 확률과정의 성질을 활용한 네트워크 분석이 더 맞는거 같다. 이 내용에 대해선 논문들[1,2,3,4]을 참고하여 추후에 다시 포스팅해봐야겠다.

  • 또한, 우리가 구상한 모델은 최초지연을 예측한 후, sequential하게 예측하는 방법이다. 이러한 예측은 안정성이 떨어질 뿐만 아니라, 속도가 느릴 수밖에 없다. 따라서, 연결지연을 예측할 수 있는 모델을 조금 더 공부해보면 좋을 것 같다.

결론

그럼에도 불구하고, 이 프로젝트를 통해선 정말 많은 것을 배웠다. 특히, 기존 알고리즘을 사용하지 않고 원하는대로 알고리즘을 응용하는 법을 배웠다. 이 과정에서, 각 모델에 대해 더 깊게 이해할 수 있었고, 알고리즘 공부에 재미를 알게된 것 같다. 앞으로도 수상에 연연하지 않고, 이렇게 많이 배울 수 있는 프로젝트를 계속 진행하고 싶다.

마지막으로, 밤낮 안가리고 열심히 함께 해준 팀원들에게 너무 고맙다.