In [1]결측 채우기·전처리
def fill_missing(df, ref):
df = df.copy()
df['payment_method'] = df['payment_method'].fillna('missing')
for col in ['avg_watch_hours_30d', 'completion_rate_30d', 'buffering_ratio_30d', 'nps_score']:
df[col] = df[col].fillna(ref[col].median())
return df
train_proc = fill_missing(train_df, ref=train_df)
test_proc = fill_missing(test_df, ref=train_df)
drop_cols = ['customer_id', 'snapshot_date', 'churned_60d', 'payment_method']
cat_cols = ['plan_type', 'acquisition_channel', 'region', 'device_os',
'contract_type', 'support_tier', 'usage_segment']
feature_cols = [c for c in train_proc.columns if c not in drop_cols]
num_cols = [c for c in feature_cols if c not in cat_cols]
preprocessor = ColumnTransformer([
('num', StandardScaler(), num_cols),
('cat', OneHotEncoder(handle_unknown='ignore'), cat_cols),
])
X_train_scaled = preprocessor.fit_transform(train_proc[feature_cols])
print('전처리 후 X_train shape:', X_train_scaled.shape)
Out[1] 출력 보기
전처리 후 X_train shape: (90000, 53)