<jupyter_start><jupyter_text>[mlcourse.ai](https://mlcourse.ai) – Open Machine Learning Course Auteur: [<NAME>](https://yorko.github.io) (@yorko). Edité et traduit par [<NAME>](https://github.com/oussou-dev). This material is subject to the terms and conditions of the [Creative Commons CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) license. Free use is permitted for any non-commercial purpose.  Mission 2. Automne 2019  Partie 2. Gradient boosting **Dans cette mission, vous êtes invité à faire mieux que la "baseline" (référence de base) dans la compétition ["Flight delays](https://www.kaggle.com/c/flight-delays-fall-2018).**Cette fois-ci, nous avons décidé de partager un scénario de base CatBoost plutôt correct. Vous devrez améliorer la solution fournie.Avant de vous lancer sur la mission, nous vous conseillons de consulter le matériel de cours correspondant: 1. [Classification, arbres-de-décision et k-plus-proches-voisins](https://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_english/topic03_decision_trees_kNN/topic3_decision_trees_kNN.ipynb?flush_cache=true), version interactive sur [Kaggle](https://www.kaggle.com/kashnitsky/topic-3-decision-trees-and-knn) 2. Ensembles:  - [Bagging](https://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_english/topic05_ensembles_random_forests/topic5_part1_bagging.ipynb?flush_cache=true), version interactive sur [Kaggle](https://www.kaggle.com/kashnitsky/topic-5-ensembles-part-1-bagging)  - [Forêt aléatoire](https://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_english/topic05_ensembles_random_forests/topic5_part2_random_forest.ipynb?flush_cache=true), version intercative sur [Kaggle](https://www.kaggle.com/kashnitsky/topic-5-ensembles-part-2-random-forest)  - [Feature Importance](https://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_english/topic05_ensembles_random_forests/topic5_part3_feature_importance.ipynb?flush_cache=true), version interactive sur [Kaggle](https://www.kaggle.com/kashnitsky/topic-5- ensembles-part-3-feature-importance) 3. [Gradient boosting](https://nbviewer.jupyter.org/github/Yorko/mlcourse_open/blob/master/jupyter_english/topic10_boosting/topic10_gradient_boosting.ipynb?flush_cache=true), version interactive sur [Kaggle](https://www.kaggle.com/kashnitsky/topic-10-gradient-boosting)  - Régression logistique, forêt aléatoire et LightGBM dans le cadre de la compétition "Kaggle Forest Cover Type Prediction": [Kernel](https://www.kaggle.com/kashnitsky/topic-10-practice-with-logit-rf-and-lightgbm)  4. Vous pouvez également vous exercer avec des missions de démonstration, plus simples et déjà partagées avec des solutions:  - "Decision trees with a toy task and the UCI Adult dataset": [mission](https://www.kaggle.com/kashnitsky/a3-demo-decision-trees) + [solution](https://www.kaggle.com/kashnitsky/a3-demo-decision-trees-solution)  - "Logistic Regression and Random Forest in the credit scoring problem": [mission](https://www.kaggle.com/kashnitsky/assignment-5-logit-and-rf-for-credit-scoring) + [solution](https://www.kaggle.com/kashnitsky/a5-demo-logit-and-rf-for-credit-scoring-sol) 5. Il y a également 7 conférences vidéo sur les arbres, les forêts, la stimulation et leurs applications [mlcourse.ai/lectures](https://mlcourse.ai/lectures)  6. Tutoriels mlcourse.ai sur [categorical feature encoding](https://www.kaggle.com/waydeherman/tutorial-categorical-encoding) (par <NAME>) et [CatBoost](https://www.kaggle.com/mitribunskiy/tutorial-catboost-overview) (par <NAME>) 7. Dernier point important : [Kernels publics](https://www.kaggle.com/c/flight-delays-fall-2018/notebooks) liés à cette compétition Votre mission consiste à: 1. battre**"A2 de base (10 crédits)"**sur Public LB (**0.75914  score LB) 2. renommer votre [équipe](https://www.kaggle.com/c/flight-delays-fall-2018/team) en totale conformité avec A1 et le [classement du cours](https://docs.google.com/spreadsheets/d/15e1K0tg5ponA5R6YQkZfihrShTDLAKf5qeKaoVCiuhQ/) (à paraître le 16.09.2019) Cette tâche est censée être relativement facile. Ici, vous n'êtes pas obligé de télécharger votre solution reproductible.   Date limite pour A2: le 6 octobre 2019 à 20h59 (heure de Londres)<jupyter_code>import warnings
from pathlib import Path

import numpy as np
import pandas as pd
from catboost import CatBoostClassifier
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split<jupyter_output><empty_output><jupyter_text>**Lire les données**<jupyter_code>PATH_TO_DATA = Path("../input/flight-delays-fall-2018/")
train_df = pd.read_csv(PATH_TO_DATA / "flight_delays_train.csv")
train_df.head()
test_df = pd.read_csv(PATH_TO_DATA / "flight_delays_test.csv")
test_df.head()<jupyter_output><empty_output><jupyter_text>**Créer une seule caractéristique - "flight" (que vous devez améliorer - ajouter plus de caractéristiques)**<jupyter_code>train_df["flight"] = train_df["Origin"] + "-->" + train_df["Dest"]
test_df["flight"] = test_df["Origin"] + "-->" + test_df["Dest"]<jupyter_output><empty_output><jupyter_text>**Se souvenir des index des caractéristiques catégorielles (à passer à CatBoost)**<jupyter_code>categ_feat_idx = np.where(
    train_df.drop("dep_delayed_15min", axis=1).dtypes == "object"
)[0]
categ_feat_idx<jupyter_output><empty_output><jupyter_text>**Allouer un jeu de données de test (par exemple, un jeu de validation) pour valider le modèle**<jupyter_code>X_train = train_df.drop("dep_delayed_15min", axis=1).values
y_train = train_df["dep_delayed_15min"].map({"Y": 1, "N": 0}).values
X_test = test_df.values
X_train_part, X_valid, y_train_part, y_valid = train_test_split(
    X_train, y_train, test_size=0.3, random_state=17
)<jupyter_output><empty_output><jupyter_text>**Entraîner Catboost avec les arguments par défaut, en ne passant que les index des caractéristiques catégorielles.**<jupyter_code>ctb = CatBoostClassifier(random_seed=17, silent=True)
%%time
ctb.fit(X_train_part, y_train_part, cat_features=categ_feat_idx);
ctb_valid_pred = ctb.predict_proba(X_valid)[:, 1]<jupyter_output><empty_output><jupyter_text>**Nous avons obtenu environ 0.756 ROC AUC sur les données de test (hold-out set).**<jupyter_code>roc_auc_score(y_valid, ctb_valid_pred)<jupyter_output><empty_output><jupyter_text>**Entraîner l'ensemble des données d'entraînement, faites des prévisions sur l'ensemble des données de test. Nous obtenons ~ 0,734 lors de la compétition - Niveau de (baseline) référence "Catboost starter"**<jupyter_code>%%time
ctb.fit(X_train, y_train, cat_features=categ_feat_idx);
ctb_test_pred = ctb.predict_proba(X_test)[:, 1]
with warnings.catch_warnings():
    warnings.simplefilter("ignore")

    sample_sub = pd.read_csv(PATH_TO_DATA / "sample_submission.csv", index_col="id")
    sample_sub["dep_delayed_15min"] = ctb_test_pred
    sample_sub.to_csv("ctb_pred.csv")
!head ctb_pred.csv<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12255466052934408, 'fraction_numerical': 0.019418872266973534, 'mean_word_length': 6.557608695652174, 'pattern_counts': {'":': 5, '<': 37, '<?xml version=': 0, '>': 39, 'https://': 26, 'lorem ipsum': 0, 'www.': 15, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '448879', 'license': 'Unlicense', 'n_tokens_mistral': 2675, 'n_tokens_neox': 2562, 'n_words': 491, 'path': 'jupyter_french/assignments_fall2019/mlcourse-ai-fall-2019-catboost-starter-fr_def.ipynb', 'repo_name': 'salman394/AI-ml--course', 'size': '6986'}