Satarkta / train_model.py
camphor5's picture
Upload folder using huggingface_hub
a537170 verified
Raw
History Blame Contribute Delete
1.74 kB
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import average_precision_score
from data_generator import _load_paysim_data
def train_and_save_model(model_path: str = 'model.json'):
"""Trains an XGBoost model on the PaySim dataset and saves the artifact."""
print("Fetching PaySim dataset for training...")
normal_df, fraud_df = _load_paysim_data()
# Take a sample to keep training fast (e.g. 50k normal, all fraud)
df = pd.concat([
normal_df.sample(50000, random_state=42),
fraud_df
]).reset_index(drop=True)
# Convert 'type' to categorical for XGBoost
df['type'] = df['type'].astype('category')
features = ['step', 'type', 'amount', 'oldbalanceOrg', 'newbalanceOrig',
'oldbalanceDest', 'newbalanceDest']
X = df[features]
y = df['isFraud']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
print("Training XGBoost Classifier on PaySim features...")
clf = xgb.XGBClassifier(
n_estimators=100,
max_depth=5,
learning_rate=0.1,
tree_method='hist',
scale_pos_weight=50, # Handle imbalance
objective='binary:logistic',
enable_categorical=True,
random_state=42
)
clf.fit(X_train, y_train)
# Predict probabilities for AUPRC
y_scores = clf.predict_proba(X_test)[:, 1]
auprc = average_precision_score(y_test, y_scores)
print(f"Model trained. Test AUPRC (Average Precision): {auprc:.4f}")
clf.save_model(model_path)
print(f"Model saved to {model_path}")
if __name__ == "__main__":
train_and_save_model()