[프로젝트]구독 예측 - EDA

딩나·2023년 11월 15일

데이터 정보



train.head()
user_idsubscription_durationrecent_login_timeaverage_login_timeaverage_time_per_learning_sessionmonthly_active_learning_daystotal_completed_coursesrecent_learning_achievementabandoned_learning_sessionscommunity_engagement_levelpreferred_difficulty_levelsubscription_typecustomer_inquiry_historypayment_patterntarget
0b919c29d131414.9461638.427187181668.36045534LowBasic450
1a0a60abb161818.45322472.646087161397.56732223MediumBasic161
2b9f171ae22116.19522821.774492131494.35876334MediumPremium071
35dc0ba8b11917.62865642.659066191870.15322803LowBasic101
465c836544521.39065630.744287191081.91790824MediumBasic301

train.info()

1만개 데이터, null값 없음, object 유형 2개, 나머지는 수치형 변수


train.target.value_counts()

계속 구독하는 경우 6199건, 구독 해지하는 경우 3801건


수치형 데이터의 통계값 확인

columns = [
    'subscription_duration', 'recent_login_time', 'average_login_time',
    'average_time_per_learning_session', 'monthly_active_learning_days',
    'total_completed_courses', 'recent_learning_achievement', 'abandoned_learning_sessions',
    'community_engagement_level', 'customer_inquiry_history'
]

train[columns].describe() 
subscription_durationrecent_login_timeaverage_login_timeaverage_time_per_learning_sessionmonthly_active_learning_daystotal_completed_coursesrecent_learning_achievementabandoned_learning_sessionscommunity_engagement_level
count10000.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.000000
mean11.89740015.01320014.99407654.91772012.54540012.22750075.0295133.0436003.886100
std6.6008968.3625733.00186956.0243106.9322393.6341259.9685291.7550521.262175
min1.0000001.0000002.3661890.0115151.0000001.00000035.9417550.0000001.000000
25%6.0000008.00000013.02559715.2766117.00000010.00000068.2780542.0000003.000000
50%12.00000015.00000014.97922837.57881813.00000012.00000075.1260613.0000004.000000
75%18.00000022.00000016.99534075.58420019.00000015.00000081.7189764.0000005.000000
max23.00000029.00000026.998490503.37261624.00000027.000000112.64382812.0000005.000000

average_time_per_learning_session에 대한 예시
평균값 : 54.92, 중앙값 : 27.58 로 오른쪽으로 긴 꼬리를 가진 분포 예상됨

해결방안)

  1. 로그변환 : 왼쪽으로 치우친 데이터는 로그 변환을 통해 정규 분포에 가깝게 변환 가능
  2. 제곱근 변환 : 로그 변환과 유사하게 제곱근 변환도 왼쪽으로 치우친 분포를 더 정규분포에 가깝게 만들기 가능
  3. 박스-콕스 변환 또는 예오-존슨 변환 : 데이터를 정규 분포에 가깝게 변환
  4. 이상치 제거 또는 대체
  5. 데이터 구간환(Bining) : 연속형 데이터를 여러 범주로 구간화하여 범주형 변수로 변환
  6. 비대칭 데이터에 강인한 모델 사용 : 트리 기반 모델은 데이터의 비대칭 분포에 상대적으로 덜 민감

0개의 댓글