본문 바로가기
Etc/Kaggle & DACON

[DACON] 항공사 고객 만족도 예측 경진대회

by VAMOSSS 2022. 2. 17.
반응형

DACON - 항공사 고객 만족도 예측 경진대회

2022.02.07 ~ 2022.02.18 동안 진행되었던 DACON 항공사 고객 만족도 예측 경진대회 참가 후기입니다.

 

본 글에서는 데이터 분석 진행 과정을 요약하여 적어보려 합니다.

아래의 링크는 제가 한 코드를 전부를 공유해놓은 주소입니다.

 

저는 종료가 하루 남은 현재 시점에 517명 중 19등의 점수를 받았습니다. 

(사진은 24등인데, 19등과 점수가 동일합니다 ㅎㅎ)

해당 대회의 평가 산식은 'Accuracy'였고, 저는 public : 0.938 점수를 받았습니다.

 

저도 다른 분들의 코드를 참고하여 점수를 좀 더 올리면서 흥미를 유발하려 했던 것 같습니다.

이 글을 보신 분들이 조금이라도 얻어가시는 게 있으시면 좋겠습니다.

 

▶DACON - Codeshare

 

각 Feature에 좀 더 신경써보자! 현재 점수 코드! [public : 0.938]

항공사 고객 만족도 예측 경진대회

dacon.io

 

DataSet 확인

test, train data를 로드하고, 데이터의 개수, 피쳐의 수, 결측치 존재 유무 등을 간단하게 확인했습니다.

df_train.shape
df_test.shape

df_train.info()
df_test.info()

import missingno as msno
msno.matrix(df_train)

 

EDA

모델을 통한 예측에 있어 좋은 점수를 받기 위해서는 EDA가 매우 중요하다고 생각합니다.

 

Feature를 연속형과 이산형, 범주형으로 분류하여 시각화를 해보고, Insight를 얻으려 노력했습니다.

그리고 각 Feature 간의 상관관계(Correlation)를 살펴보았습니다.

 

특이했던 부분은 어떤 항목에서 점수를 0점을 줬는데 target(만족)=1 인 데이터가 많았다는 것입니다.

저는 이를 귀찮아서 대충 0점으로 몰아서 준 게 아닐까 생각하였고, 다른 분들은 결측치를 0으로 채운 거다 라는 접근을 하셨습니다.

 

numeric_feature = ['Age', 'Flight Distance', 'Departure Delay in Minutes', 'Arrival Delay in Minutes']
ordinal_feature = ['Seat comfort', 'Departure/Arrival time convenient', 'Food and drink', 'Gate location', 
           'Inflight wifi service', 'Inflight entertainment', 'Online support', 'Ease of Online booking', 
           'On-board service', 'Leg room service', 'Baggage handling', 'Checkin service', 'Cleanliness', 'Online boarding']
categorical_feature = ['Gender', 'Customer Type', 'Type of Travel', 'Class']

from sklearn.preprocessing import LabelEncoder
corr_df = df_train.copy()
corr_df[corr_df.columns[corr_df.dtypes=='O']] = corr_df[corr_df.columns[corr_df.dtypes=='O']].astype(str).apply(LabelEncoder().fit_transform)

plt.figure(figsize=(35,25))

heat_table = corr_df.corr()
mask = np.zeros_like(heat_table)
mask[np.triu_indices_from(mask)] = True
heatmap_ax = sns.heatmap(heat_table, annot=True, mask = mask, cmap='coolwarm')
heatmap_ax.set_xticklabels(heatmap_ax.get_xticklabels(), fontsize=15, rotation=45)
heatmap_ax.set_yticklabels(heatmap_ax.get_yticklabels(), fontsize=15)
plt.title('correlation between features', fontsize=40)
plt.show()

 

Feature Engineering

Feature Engineering 부분에서는 아래의 과정을 진행했습니다. 

 

  • Age :
    • 나잇대별로 구분. (10대, 20대, 30대 ,,,)
  • Departure Delay in Minutes, Arrival Delay in Minutes :
    • 처음에는 출발 딜레이가 크게 존재하면 도착 딜레이가 존재하겠구나 생각하고 만족도에 많은 영향을 주겠다 생각했는데, 출발 딜레이와 도착 딜레이를 비교해보니 한쪽만 0인 값들이 존재. 
    • 출발이든 도착이든 "지연"이 중요하겠다 생각하여, 두 피쳐의 평균값인 피쳐 Delay 생성 후 두 피쳐 삭제.
    • 편향되어 있어 Log transformation 적용.
  • 0이 존재하는 점수 피쳐들 : 
    • Seat comfort랑 Food and drink가 0이면 무조건 만족(target=1), Seat comfort랑 Leg room service가 0이면 무조건 만족(target=1) 등 관계를 찾아보았음.
    • 위의 조건에 해당하는 경우 0 값을 5로 변경 or 위의 조건에 해당하는 경우에 1 값을 갖는 피쳐 생성 등 다양한 시도 -> 결과적으로는 점수가 올라가진 않음
  • One-hot Encoding
  • Feature Drop
    • id - 학습에 관련 없음
    • Food and drink - Seat comfort와의 다중 공선 성과 많은 결측치
    • Departure/Arrival time convenient - 많은 결측치 및 target과의 낮은 상관계수
    • Inflight entertainment - target과 낮은 상관계수 (0을 어떻게 처리할지 모르겠음)
    • Online support  - target과 낮은 상관계수
    • Ease of Online booking  - target과 낮은 상관계수

 

Modeling & Prediction

모델링은 이번 대회를 진행하면서 처음 알게 된 pycaret으로 진행해보았습니다.

다양한 모델들을 비교해주는 유용한 라이브러리인 것 같습니다.

 

저는 pycaret을 활용하여 Accuracy 기준으로 4개의 모델을 선정하였고, soft voting을 사용하여 정확도를 올리고자 했습니다.

 

from pycaret.classification import *

clf1 = setup(data = df_train,
             silent = True,
             target = 'target',
             session_id = 20201809,
             n_jobs = 7)
             
#상위 모델 4개를 선택
best = compare_models(n_select=4, fold = 10,
                      cross_validation=True,
                     sort='Accuracy') 
                     
blend_4_soft = blend_models(estimator_list=best, method='soft', choose_better = True)

final_blend_4_soft = finalize_model(blend_4_soft)
prediction = predict_model(final_blend_4_soft, data = df_test)

 

Submission

submission = pd.read_csv("./data/sample_submission.csv")
submission['target'] = prediction['Label']
submission.head()

submission.to_csv("./data/submission_pycaret_4.csv",index=False)

 

Reference

https://dacon.io/competitions/official/235871/overview/description

 

항공사 고객 만족도 예측 경진대회 - DACON

좋아요는 1분 내에 한 번만 클릭 할 수 있습니다.

dacon.io

https://github.com/Park-taenam/DACON/tree/main/Airlines

 

GitHub - Park-taenam/DACON: DACON Competition

DACON Competition. Contribute to Park-taenam/DACON development by creating an account on GitHub.

github.com

 

반응형

'Etc > Kaggle & DACON' 카테고리의 다른 글

[DACON] 집값 예측 경진대회  (0) 2022.02.04
[DACON] 펭귄 몸무게 예측 경진대회  (0) 2022.01.11
[Kaggle] Titanic 필사 - 이유한님  (0) 2022.01.09

댓글