Steps
I. 1st Data Exploration: statistiques de bases
- head(), describe(), dtypes, nunique(), isnull()
- Identifier le label
- Discuter des colonnes compliquées, ce qu’on pourrait en faire et les jeter directement
- Transformer en catégories les colonnes numérique avec peu de valeurs uniques non ordonnées: df.astype({‘col’: ‘object’})
- Supprimer les colonnes catégories avec trop de valeurs et qui ne semblent pas avoir de valeur
- Créer une liste de variables numériques et une de variables catégorielles
II. Missing values: regarder les missing values pour voir quoi en faire
- Si une colonne a peu de valeurs manquantes, supprimer les lignes associées
- Etudier le lien entre les valeurs manquantes des colonnes et la variable cible (2 histogrames/mean de y)
- Si lien, remplacer par une valeur spécifique (-1 ou 0 ou une nouvelle catégorie par exemple) avec fillna()
- Si pas de lien, on peut supprimer les entrées ou remplacer par une valeur (mean, 0) (à faire plus tard)
III. 2nd Data Exploration: distribution du label et des features
- Histrogram
- Regarder si distribution logarithmique dans se cas on peut appliquer une fonction log: apply(sign(x) * np.log(abs(x)+1))
- Pour les outliers: clipper leur valeur: clip(lower=XX, upper=XX) ou supprimer au dela d’un quantile
- Possibilité d’utiliser une méthode de détection d’outlier (OPTICS ou IsolationForest): en parler
IV. 3rd Data Exploration: lien entre les features et la variable cible
- Si label=cat -> vs cat -> crosstab(y, col) + f_chi2(crosstab) / vs num -> box(x=y, y=col) + f_oneway(y, col)
- Si label=num -> vs cat -> box(x=col, y=y) + f_oneway(col, y) / vs num -> scatter(col, y) + corr(x, y)
- Par défaut garder toutes les colonnes mais ça donne une idée de ce qu’on peut attendre du modèle
V. Pipeline
- Séparer X et y puis séparer test et train avec train_test_val (model_selection)
- Vérifier que plus de données sont manquantes où alors qu’elles vont être prises en compte
- Utiliser Imputer pour transformer les na en moyenne ou médiane (ou val) (utiliser un pipeline si besoin)
- Utiliser TargetEncoder pour encoder les colonnes catégorielles (utiliser un pipeline si besoin)
- Mettre dans un ColumnTransformer avec chaque pipeline associée à des colonnes
- Faire un pipeline avec le ColumnTranformer et un model (GradientBoosting)
VI. Fit
- Option 1: fit sur X_train et test sur X_test
- Option 2: utiliser cross_val_score sur X_train (make_scorer)
- Option 3: RandomizedSearchCV avec les distribution à définir + fit le meilleur modèle sur X_train
VII. Metric
- Régression MSE ou MAE
- Classification: Accuracy, f1_score, roc_auc_score, confusion_matrix, roc_curve(predict_proba)