{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nimport optuna\nimport gc\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-01-07T21:34:10.175771Z","iopub.execute_input":"2023-01-07T21:34:10.176162Z","iopub.status.idle":"2023-01-07T21:34:10.183654Z","shell.execute_reply.started":"2023-01-07T21:34:10.176130Z","shell.execute_reply":"2023-01-07T21:34:10.182890Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#enregistrer les donnée de train et les donnée de test\ntrain = pd.read_csv(\"/kaggle/input/emsi-5iir-ds/train.csv\")\ntest = pd.read_csv(\"/kaggle/input/emsi-5iir-ds/test.csv\")","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:10.187993Z","iopub.execute_input":"2023-01-07T21:34:10.188292Z","iopub.status.idle":"2023-01-07T21:34:11.857623Z","shell.execute_reply.started":"2023-01-07T21:34:10.188268Z","shell.execute_reply":"2023-01-07T21:34:11.855150Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#renvoie la taille du tableau.\ntrain.shape, test.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.858495Z","iopub.status.idle":"2023-01-07T21:34:11.858985Z","shell.execute_reply.started":"2023-01-07T21:34:11.858806Z","shell.execute_reply":"2023-01-07T21:34:11.858822Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#describe Générer des statistiques descriptives des donnée d'entrainement.\ntrain.describe()","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.859849Z","iopub.status.idle":"2023-01-07T21:34:11.860342Z","shell.execute_reply.started":"2023-01-07T21:34:11.860193Z","shell.execute_reply":"2023-01-07T21:34:11.860208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#describe Générer des statistiques descriptives des donnée de test \ntest.describe()","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.861166Z","iopub.status.idle":"2023-01-07T21:34:11.861622Z","shell.execute_reply.started":"2023-01-07T21:34:11.861456Z","shell.execute_reply":"2023-01-07T21:34:11.861471Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#afficher les type des column comme desc de sql\ntrain.info()","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.862474Z","iopub.status.idle":"2023-01-07T21:34:11.862942Z","shell.execute_reply.started":"2023-01-07T21:34:11.862780Z","shell.execute_reply":"2023-01-07T21:34:11.862795Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.info()","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.863859Z","iopub.status.idle":"2023-01-07T21:34:11.864320Z","shell.execute_reply.started":"2023-01-07T21:34:11.864175Z","shell.execute_reply":"2023-01-07T21:34:11.864190Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfeatures = [f for f in test.columns if f != 'id' and f != 'f_27']\ntest[features].head(2)","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.865236Z","iopub.status.idle":"2023-01-07T21:34:11.865711Z","shell.execute_reply.started":"2023-01-07T21:34:11.865566Z","shell.execute_reply":"2023-01-07T21:34:11.865581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Méthode du score de l'estimateur : Les estimateurs disposent d'une scoreméthode fournissant un critère d'évaluation par défaut pour le problème qu'ils sont censés résoudre. Ceci n'est pas abordé sur cette page, mais dans la documentation de chaque estimateur.\nfrom sklearn.metrics import roc_auc_score, accuracy_score\n#Fournit des indices d'entraînement/test pour diviser les données en ensembles d'entraînement/test.\nfrom sklearn.model_selection import StratifiedKFold\n#Divisez des tableaux ou des matrices en sous-ensembles d'entraînement et de test aléatoires.\nfrom sklearn.model_selection import train_test_split\n","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.866614Z","iopub.status.idle":"2023-01-07T21:34:11.867063Z","shell.execute_reply.started":"2023-01-07T21:34:11.866919Z","shell.execute_reply":"2023-01-07T21:34:11.866934Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#enregistrer les donner d'entrainement dans la variable y\ny = train[\"target\"]\n#enregistrer les donner d'test dans la variable x apré la suppression des column pour le test\nX = train.drop(columns=[\"id\",\"f_27\", \"target\"])\n#enregistrer les donner de validation pour le test dans la variable test apré la suppression des column pour le test\ntest = test.drop(columns=[\"id\",\"f_27\"])\n#afficher column ligne\nX.shape, test.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.867877Z","iopub.status.idle":"2023-01-07T21:34:11.868334Z","shell.execute_reply.started":"2023-01-07T21:34:11.868190Z","shell.execute_reply":"2023-01-07T21:34:11.868205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Divisez des tableaux ou des matrices en sous-ensembles d'entraînement et de test aléatoires avec 30% pour le test.\nX_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.33, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.869147Z","iopub.status.idle":"2023-01-07T21:34:11.869576Z","shell.execute_reply.started":"2023-01-07T21:34:11.869425Z","shell.execute_reply":"2023-01-07T21:34:11.869439Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from lightgbm import LGBMClassifier\n#importer le model xgboost plus eficase que LGBMCLsassifier\n#XGBoost est une bibliothèque distribuée optimisée d'amplification de gradient conçue pour être hautement efficace , flexible et portable . Il implémente des algorithmes d'apprentissage automatique dans le cadre du Gradient Boosting . \nfrom xgboost import XGBClassifier\n#Ce module fournit diverses fonctions liées au temps. \nimport time","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.870397Z","iopub.status.idle":"2023-01-07T21:34:11.870915Z","shell.execute_reply.started":"2023-01-07T21:34:11.870756Z","shell.execute_reply":"2023-01-07T21:34:11.870771Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Définissez le niveau de journalisation optuna.logging.WARNING.\n#optuna.logging.set_verbosity(optuna.logging.WARNING)\n#methode qui pérmer d'entrainer le model et de Divisez des tableaux ou des matrices en sous-ensembles d'entraînement pour le test.\ndef objectivesLGBM(trial):\n    #model =LGBMClassifier\n    #régler le nombre et la taille des arbres de décision avec XGBoost \n    model = XGBClassifier(n_estimators=100)\n    #fit()est mis en œuvre par chaque estimateur et accepte une entrée pour les données d'échantillon ( X) et pour les modèles supervisés\n    model.fit(X,y)\n    #retourner le scorp\n    return model.score(X,y)","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.871754Z","iopub.status.idle":"2023-01-07T21:34:11.872216Z","shell.execute_reply.started":"2023-01-07T21:34:11.872066Z","shell.execute_reply":"2023-01-07T21:34:11.872083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#model =LGBMClassifier\n#utiliser le model xgbclassifier pour Le gradient boosting implique \n#la création et l'ajout séquentiel d'arbres de décision, \n#chacun essayant de corriger les erreurs des apprenants qui l'ont précédé.\nmodel = XGBClassifier(n_estimators=100)\n#un estimateur est un objet qui ajuste un modèle basé sur les données d'entrée \n#(c'est-à-dire les données d'apprentissage)\nmodel.fit(X, y)\n#afficher le scorp\nprint(\"Training score :\", model.score(X, y))\n#prédicter le model avec les donner de test\npred_y_test = model.predict(X_test)\n#afficher le résultat\nprint(\"Roc auc score  :\", roc_auc_score(y_test, pred_y_test))","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.873047Z","iopub.status.idle":"2023-01-07T21:34:11.873477Z","shell.execute_reply.started":"2023-01-07T21:34:11.873323Z","shell.execute_reply":"2023-01-07T21:34:11.873343Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#biblio basée sur l'état pour matplotlib. Il fournit un moyen de traçage implicite\nimport matplotlib.pyplot as plt\n#seaborn : visualisation de données statistiques\nimport seaborn as sns\n#warnings— Contrôle d'avertissement ¶\nimport warnings\n#Les messages d'avertissement sont généralement émis dans les situations où il est utile d'alerter l'utilisateur d'un problème dans un programme\nwarnings.simplefilter(action='ignore', category=FutureWarning)\n\n# sorted(zip(clf.feature_importances_, X.columns), reverse=True)\n#crée une nouvelle dataframe fearure_imp triée de notre model \nfeature_imp = pd.DataFrame(sorted(zip(model.feature_importances_,X.columns)), columns=['Value','Feature'])\n#Créez une nouvelle figure avec 20ligne 10 column \nplt.figure(figsize=(20, 10))\n#Afficher les estimations ponctuelles et les erreurs sous forme de barres rectangulaires.\nsns.barplot(x=\"Value\", y=\"Feature\", data=feature_imp.sort_values(by=\"Value\", ascending=False))\n#titre graph\nplt.title('LightGBM Features (avg over folds)')\nplt.tight_layout()\n#afficher graph\nplt.show()\n#enregistrer sous format png\nplt.savefig('lgbm_importances-01.png')","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.874256Z","iopub.status.idle":"2023-01-07T21:34:11.874694Z","shell.execute_reply.started":"2023-01-07T21:34:11.874546Z","shell.execute_reply":"2023-01-07T21:34:11.874562Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#crée variable feature_imp tree par la column value\nfeature_imp = feature_imp.sort_values(by = \"Value\", ascending=False)\nfeature_imp","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.875718Z","iopub.status.idle":"2023-01-07T21:34:11.876384Z","shell.execute_reply.started":"2023-01-07T21:34:11.876206Z","shell.execute_reply":"2023-01-07T21:34:11.876228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#stocker les 6 premiére ligne triée par value\nselected_features = feature_imp[:6]['Feature'].tolist()\nselected_features","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.877287Z","iopub.status.idle":"2023-01-07T21:34:11.877605Z","shell.execute_reply.started":"2023-01-07T21:34:11.877428Z","shell.execute_reply":"2023-01-07T21:34:11.877442Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X.shape, test.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.878473Z","iopub.status.idle":"2023-01-07T21:34:11.878751Z","shell.execute_reply.started":"2023-01-07T21:34:11.878611Z","shell.execute_reply":"2023-01-07T21:34:11.878625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#affichage du features avant modification \nX","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.879669Z","iopub.status.idle":"2023-01-07T21:34:11.879971Z","shell.execute_reply.started":"2023-01-07T21:34:11.879806Z","shell.execute_reply":"2023-01-07T21:34:11.879820Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#add_basics_features est une fonction qui pérmet d'ajouter les 5 premiére ligne de base et de\n#boucler sur c'est ligne pour stocker pour chaque ligne :\n#['f_30', 'f_29', 'f_14', 'f_09', 'f_25', 'f_07'] to ['f_30_mean','f_30_std','f_30_max_min', 'f_29_mean', 'f_29_std', 'f_29_max_min'...]\n#str permet de convertir to string\ndef add_basics_features(data, features):\n    \n    for feature in features:\n        \n        new_feature_name = str(feature) + '_mean'\n        data[new_feature_name] = data[feature].mean()\n        \n        new_feature_name = str(feature) + '_std'\n        data[new_feature_name] = data[feature].std()\n        \n        new_feature_name = str(feature) + '_max_min'\n        data[new_feature_name] = data[feature].max() - data[feature].min()\n    \n    return data","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.880705Z","iopub.status.idle":"2023-01-07T21:34:11.881020Z","shell.execute_reply.started":"2023-01-07T21:34:11.880846Z","shell.execute_reply":"2023-01-07T21:34:11.880865Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#modifiction du valeur d'entrainement des features du notre data set X\nX = add_basics_features(X, selected_features)\n#modifiction du valeur de test des features du notre data set X\ntest = add_basics_features(test, selected_features)\n\nX.shape, test.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.882089Z","iopub.status.idle":"2023-01-07T21:34:11.882373Z","shell.execute_reply.started":"2023-01-07T21:34:11.882232Z","shell.execute_reply":"2023-01-07T21:34:11.882247Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#affichage du features aprés modification \nX","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.883161Z","iopub.status.idle":"2023-01-07T21:34:11.883441Z","shell.execute_reply.started":"2023-01-07T21:34:11.883301Z","shell.execute_reply":"2023-01-07T21:34:11.883315Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# StratifiedKFold : pérmet de Générez des ensembles de test tels qu'ils contiennent tous la même distribution de classes, ou aussi proche que possible.\nkf = StratifiedKFold(n_splits=14, shuffle=True, random_state = 0)\n#initialisée une variable de prédiction\ny_predict = []\n#boucle qui permet de spliter l'ensemble de test pour rendre notre model en meilleur entrainement (14 fold)\nfor fold, (train_index, val_index) in enumerate(kf.split(X, y)):\n        print('*'*14, f\" Fold {fold} \", '*'*14, '\\n')\n        \n        # Split Data\n        X_train = X.loc[train_index]\n        X_val = X.loc[val_index]\n\n        y_train = y.loc[train_index]\n        y_val = y.loc[val_index]\n        \n        # Create Model here\n        #model =LGBMClassifier\n        model = XGBClassifier(n_estimators=100)\n        \n        # Fit Model\n        model.fit(X_train,y_train)\n\n        # Make X_val prediction\n        y_pred = model.predict_proba(X_val)[:,1]\n        \n        # Make Test prediction\n        y_predict.append(model.predict_proba(test)[:,1])\n\n        # Evaluate Model\n        print(\"Training score :\", model.score(X_train, y_train))\n        print(\"Roc auc score  :\", roc_auc_score(y_val, y_pred), '\\n')\n        \n        # Free the memory\n        del X_train, y_train, model, X_val, y_val, y_pred\n        gc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.885120Z","iopub.status.idle":"2023-01-07T21:34:11.885412Z","shell.execute_reply.started":"2023-01-07T21:34:11.885267Z","shell.execute_reply":"2023-01-07T21:34:11.885281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#model =LGBMClassifier\n#régler le nombre et la taille des arbres en estime par 100 de décision avec XGBClassifier en Python\nmodel = XGBClassifier(n_estimators=100)\n#fiter le model\nmodel.fit(X, y)\n#permiter notre model\ny_predict.append(model.predict_proba(test)[:,1])","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.886454Z","iopub.status.idle":"2023-01-07T21:34:11.886770Z","shell.execute_reply.started":"2023-01-07T21:34:11.886626Z","shell.execute_reply":"2023-01-07T21:34:11.886641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#supprimér tout ces variable \ndel model, X, y, test, X_test, y_test\n# collect()est une opération d'action utilisée pour récupérer tous les éléments de l'ensemble de données\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.887924Z","iopub.status.idle":"2023-01-07T21:34:11.888214Z","shell.execute_reply.started":"2023-01-07T21:34:11.888071Z","shell.execute_reply":"2023-01-07T21:34:11.888086Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Renvoie la moyenne des éléments du tableau. La moyenne est prise sur le tableau aplati par défaut,\ntt =np.array(y_predict).mean(axis=0)","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.889317Z","iopub.status.idle":"2023-01-07T21:34:11.889646Z","shell.execute_reply.started":"2023-01-07T21:34:11.889489Z","shell.execute_reply":"2023-01-07T21:34:11.889504Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#les valeur de prédiction de notre model \nprint(tt)","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.892358Z","iopub.status.idle":"2023-01-07T21:34:11.892691Z","shell.execute_reply.started":"2023-01-07T21:34:11.892526Z","shell.execute_reply":"2023-01-07T21:34:11.892547Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#récupérer dataframe de notre fichier sample_submission.csv\nsubmission = pd.read_csv(\"/kaggle/input/emsi-5iir-ds/sample_submission.csv\")\n#renvoie la taille du tableau.\nsubmission.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.893848Z","iopub.status.idle":"2023-01-07T21:34:11.894172Z","shell.execute_reply.started":"2023-01-07T21:34:11.894023Z","shell.execute_reply":"2023-01-07T21:34:11.894041Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#crée une column target contien l'ensemble de notre prédiction \nsubmission['target'] = np.array(y_predict).mean(axis=0)\n#crée un fichier dans notre new fichier submission.csv et desactiver l'index\nsubmission.to_csv('submission.csv', index=False)\nsubmission","metadata":{"execution":{"iopub.status.busy":"2023-01-07T21:34:11.895226Z","iopub.status.idle":"2023-01-07T21:34:11.895516Z","shell.execute_reply.started":"2023-01-07T21:34:11.895371Z","shell.execute_reply":"2023-01-07T21:34:11.895386Z"},"trusted":true},"execution_count":null,"outputs":[]}]}