Qamro's picture
Upload 2 files
00b482f verified
Raw History Blame Contribute Delete
1.84 kB
import pandas as pd, numpy as np
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import roc_auc_score
import lightgbm as lgb
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
target = 'addicted_label'
cat_cols = ['gender','stress_level','academic_work_impact']
num_cols = [c for c in train.columns if c not in cat_cols+['id',target]]
for c in cat_cols:
train[c] = train[c].astype('category')
test[c] = test[c].astype('category')
# align categories
cats = train[c].cat.categories
test[c] = test[c].cat.set_categories(cats)
X = train[num_cols+cat_cols]
y = train[target]
X_test = test[num_cols+cat_cols]
skf = StratifiedKFold(n_splits=3, shuffle=True, random_state=42)
oof = np.zeros(len(X))
preds = np.zeros(len(X_test))
aucs=[]
params = dict(
objective='binary',
metric='auc',
learning_rate=0.03,
num_leaves=63,
max_depth=-1,
min_child_samples=30,
subsample=0.8,
colsample_bytree=0.8,
reg_alpha=0.1,
reg_lambda=0.1,
n_estimators=800,
verbosity=-1
)
for fold,(tr_idx,va_idx) in enumerate(skf.split(X,y)):
X_tr,X_va = X.iloc[tr_idx], X.iloc[va_idx]
y_tr,y_va = y.iloc[tr_idx], y.iloc[va_idx]
model = lgb.LGBMClassifier(**params)
model.fit(X_tr,y_tr, eval_set=[(X_va,y_va)],
callbacks=[lgb.early_stopping(100, verbose=False)],
categorical_feature=cat_cols)
va_pred = model.predict_proba(X_va)[:,1]
oof[va_idx] = va_pred
auc = roc_auc_score(y_va, va_pred)
aucs.append(auc)
print(f"Fold {fold} AUC: {auc:.5f}")
preds += model.predict_proba(X_test)[:,1] / skf.n_splits
print("Mean AUC:", np.mean(aucs))
print("OOF AUC:", roc_auc_score(y, oof))
sub = pd.DataFrame({'id': test['id'], 'addicted_label': preds})
sub.to_csv('submission.csv', index=False)
print(sub.head())