| { |
| "cells": [ |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Documentation" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Sample Notebook To Build a Model and Make Predictions with the Titanic Dataset from Kaggle" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "Table of Contents\n", |
| "\n", |
| "0. [Params](#Params)\n", |
| "1. [Acquisitor and Cleaner](#Acquisitor-and-Cleaner)\n", |
| "2. [Training Preparator](#Training-Preparator)\n", |
| "3. [Trainer](#Trainer)\n", |
| "4. [Metrics Evaluator](#Metrics-Evaluator)\n", |
| "5. [Prediction Preparator](#Prediction-Preparator)\n", |
| "6. [Predictor](#Predictor)\n", |
| "7. [Feedback](#Feedback)" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Params" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 1, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "# puts this params in engine.params file to be used by dryrun and executor as default params\n", |
| "# use a full grid over all parameters\n", |
| "params = {\n", |
| " \"svm\": [\n", |
| " {\"C\": [1, 10, 100], \"gamma\": [0.01, 0.001], \"kernel\": [\"linear\"]},\n", |
| " {\"C\": [1, 10, 100],\"gamma\": [0.01, 0.001],\"kernel\": [\"rbf\"]}\n", |
| " ],\n", |
| " \"rf\": {\n", |
| " \"max_depth\": [3],\n", |
| " \"random_state\": [0],\n", |
| " \"min_samples_split\": [2],\n", |
| " \"min_samples_leaf\": [1],\n", |
| " \"n_estimators\": [20],\n", |
| " \"bootstrap\": [True, False],\n", |
| " \"criterion\": [\"gini\", \"entropy\"]\n", |
| " },\n", |
| " \"pred_cols\": [\"Age\", \"Pclass\", \"Sex\", \"Fare\"],\n", |
| " \"dep_var\": \"Survived\"\n", |
| "}" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 2, |
| "metadata": { |
| "marvin_cell": "acquisitor" |
| }, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "891 samples to train with 12 features...\n", |
| "418 samples to test...\n" |
| ] |
| } |
| ], |
| "source": [ |
| "from marvin_python_toolbox.common.data import MarvinData\n", |
| "import pandas as pd\n", |
| "\n", |
| "train_df = pd.read_csv(MarvinData.download_file(\"https://s3.amazonaws.com/marvin-engines-data/titanic/train.csv\"))\n", |
| "test_df = pd.read_csv(MarvinData.download_file(\"https://s3.amazonaws.com/marvin-engines-data/titanic/test.csv\"))\n", |
| "\n", |
| "print (\"{} samples to train with {} features...\".format(train_df.shape[0], train_df.shape[1]))\n", |
| "print (\"{} samples to test...\".format(test_df.shape[0]))\n", |
| "\n", |
| "marvin_initial_dataset = {\n", |
| " 'train': train_df,\n", |
| " 'test': test_df\n", |
| "}" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Training Preparator" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 4, |
| "metadata": { |
| "marvin_cell": "tpreparator" |
| }, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "Length: 714\n", |
| "Preparation is Done!!!!\n" |
| ] |
| } |
| ], |
| "source": [ |
| "from sklearn.model_selection import StratifiedShuffleSplit, train_test_split, cross_val_score, GridSearchCV\n", |
| "\n", |
| "train_no_na = marvin_initial_dataset['train'][params[\"pred_cols\"] + [params[\"dep_var\"]]].dropna()\n", |
| "\n", |
| "print(\"Length: {}\".format(len(train_no_na)))\n", |
| "\n", |
| "# Feature Engineering\n", |
| "data_X = train_no_na[params[\"pred_cols\"]]\n", |
| "data_X.loc[:, 'Sex'] = data_X.loc[:, 'Sex'].map({'male': 1, 'female': 0})\n", |
| "data_y = train_no_na[params[\"dep_var\"]]\n", |
| "\n", |
| "# Prepare for Stratified Shuffle Split\n", |
| "sss = StratifiedShuffleSplit(n_splits=5, test_size=.6, random_state=0)\n", |
| "sss.get_n_splits(data_X, data_y)\n", |
| "\n", |
| "for train_index, test_index in sss.split(data_X, data_y):\n", |
| " X_train, X_test = data_X.iloc[train_index], data_X.iloc[test_index]\n", |
| " y_train, y_test = data_y.iloc[train_index], data_y.iloc[test_index]\n", |
| "\n", |
| "marvin_dataset = {\n", |
| " 'X_train': X_train,\n", |
| " 'y_train': y_train,\n", |
| " 'X_test': X_test,\n", |
| " 'y_test': y_test,\n", |
| " 'sss': sss\n", |
| "}\n", |
| "\n", |
| "print (\"Preparation is Done!!!!\")" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Trainer" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 5, |
| "metadata": { |
| "marvin_cell": "trainer" |
| }, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "\n", |
| "\n", |
| "Starting grid search using SVM!\n", |
| "Model Type: SVM\n", |
| "{'kernel': 'linear', 'C': 1, 'verbose': False, 'probability': False, 'degree': 3, 'shrinking': True, 'max_iter': -1, 'decision_function_shape': None, 'random_state': None, 'tol': 0.001, 'cache_size': 200, 'coef0': 0.0, 'gamma': 0.01, 'class_weight': None}\n", |
| "Accuracy Score: 0.7825%\n", |
| "\n", |
| "\n", |
| "Starting grid search using RandomForestClassifier!\n", |
| "Model Type: RF\n", |
| "{'warm_start': False, 'oob_score': False, 'n_jobs': 1, 'verbose': 0, 'max_leaf_nodes': None, 'bootstrap': False, 'min_samples_leaf': 1, 'n_estimators': 20, 'min_samples_split': 2, 'min_weight_fraction_leaf': 0.0, 'criterion': 'entropy', 'random_state': 0, 'min_impurity_split': 1e-07, 'max_features': 'auto', 'max_depth': 3, 'class_weight': None}\n", |
| "Accuracy Score: 0.7754%\n" |
| ] |
| } |
| ], |
| "source": [ |
| "from sklearn import svm, neighbors, tree\n", |
| "from sklearn.model_selection import StratifiedShuffleSplit, train_test_split, cross_val_score, GridSearchCV\n", |
| "from sklearn.ensemble import RandomForestClassifier\n", |
| "from sklearn.preprocessing import StandardScaler, scale\n", |
| "from sklearn.linear_model import LogisticRegression\n", |
| "\n", |
| "print(\"\\n\\nStarting grid search using SVM!\")\n", |
| "\n", |
| "# Create a classifier with the parameter candidates\n", |
| "svm_grid = GridSearchCV(estimator=svm.SVC(), param_grid=params[\"svm\"], n_jobs=-1)\n", |
| "\n", |
| "# Train the classifier on training data\n", |
| "svm_grid.fit(\n", |
| " marvin_dataset['X_train'],\n", |
| " marvin_dataset['y_train']\n", |
| ")\n", |
| "\n", |
| "print(\"Model Type: SVM\\n{}\".format(svm_grid.best_estimator_.get_params()))\n", |
| "print(\"Accuracy Score: {}%\".format(round(svm_grid.best_score_,4)))\n", |
| "\n", |
| "print(\"\\n\\nStarting grid search using RandomForestClassifier!\")\n", |
| "\n", |
| "# run grid search\n", |
| "rf_grid = GridSearchCV(estimator=RandomForestClassifier(), param_grid=params[\"rf\"])\n", |
| "rf_grid.fit(\n", |
| " marvin_dataset['X_train'],\n", |
| " marvin_dataset['y_train']\n", |
| ")\n", |
| "\n", |
| "print(\"Model Type: RF\\n{}\".format(rf_grid.best_estimator_.get_params()))\n", |
| "print(\"Accuracy Score: {}%\".format(round(rf_grid.best_score_,4)))\n", |
| "\n", |
| "marvin_model = {\n", |
| " 'svm': svm_grid,\n", |
| " 'rf': rf_grid\n", |
| "}" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Metrics Evaluation" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 6, |
| "metadata": { |
| "marvin_cell": "evaluator" |
| }, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "Classification Report:\n", |
| "\n", |
| " precision recall f1-score support\n", |
| "\n", |
| " 0 0.82 0.81 0.81 257\n", |
| " 1 0.72 0.73 0.72 172\n", |
| "\n", |
| "avg / total 0.78 0.78 0.78 429\n", |
| "\n", |
| "Confusion Matrix:\n", |
| "\n", |
| "[[208 49]\n", |
| " [ 47 125]]\n", |
| "\n", |
| "\n", |
| "\n", |
| "Classification Report:\n", |
| "\n", |
| " precision recall f1-score support\n", |
| "\n", |
| " 0 0.83 0.80 0.82 264\n", |
| " 1 0.70 0.74 0.72 165\n", |
| "\n", |
| "avg / total 0.78 0.78 0.78 429\n", |
| "\n", |
| "Confusion Matrix:\n", |
| "\n", |
| "[[212 52]\n", |
| " [ 43 122]]\n", |
| "\n", |
| "\n", |
| "\n", |
| "Feature ranking:\n", |
| "1. feature Sex (0.492621)\n", |
| "2. feature Fare (0.256981)\n", |
| "3. feature Pclass (0.141660)\n", |
| "4. feature Age (0.108738)\n" |
| ] |
| } |
| ], |
| "source": [ |
| "from sklearn import metrics\n", |
| "import numpy as np\n", |
| "\n", |
| "all_metrics = {}\n", |
| "\n", |
| "_model = marvin_model\n", |
| "for model_type, fitted_model in _model.iteritems():\n", |
| " \n", |
| " y_predicted = fitted_model.predict(marvin_dataset['X_test'])\n", |
| " \n", |
| " all_metrics[model_type] = {}\n", |
| " all_metrics[model_type][\"report\"] = metrics.classification_report(y_predicted, marvin_dataset['y_test'])\n", |
| " all_metrics[model_type][\"confusion_matrix\"] = metrics.confusion_matrix(y_predicted, marvin_dataset['y_test']) \n", |
| " \n", |
| " # Print the classification report of `y_test` and `predicted`\n", |
| " print(\"Classification Report:\\n\")\n", |
| " print(all_metrics[model_type][\"report\"])\n", |
| " \n", |
| " # Print the confusion matrix\n", |
| " print(\"Confusion Matrix:\\n\")\n", |
| " print(all_metrics[model_type][\"confusion_matrix\"])\n", |
| " print(\"\\n\\n\")\n", |
| "\n", |
| "importances = _model[\"rf\"].best_estimator_.feature_importances_\n", |
| "indices = np.argsort(importances)[::-1]\n", |
| "\n", |
| "# Print the feature ranking\n", |
| "print(\"Feature ranking:\")\n", |
| "\n", |
| "all_metrics[\"feature_ranking\"] = []\n", |
| "for f in range(marvin_dataset['X_train'].shape[1]):\n", |
| " all_metrics[\"feature_ranking\"].append((f + 1, params[\"pred_cols\"][indices[f]], importances[indices[f]]))\n", |
| " print(\"%d. feature %s (%f)\" % all_metrics[\"feature_ranking\"][f])\n", |
| "\n", |
| "marvin_metrics = all_metrics" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 7, |
| "metadata": {}, |
| "outputs": [ |
| { |
| "data": { |
| "image/png": "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\n", |
| "text/plain": [ |
| "<matplotlib.figure.Figure at 0x7f6530cd9e90>" |
| ] |
| }, |
| "metadata": {}, |
| "output_type": "display_data" |
| } |
| ], |
| "source": [ |
| "import matplotlib.pyplot as plt\n", |
| "%matplotlib inline\n", |
| "\n", |
| "# Plot the feature importances of the forest\n", |
| "plt.figure(figsize=(10,5))\n", |
| "plt.title(\"Feature importances\")\n", |
| "plt.bar(range(X_train.shape[1]), importances[indices], color=\"r\", align=\"center\")\n", |
| "\n", |
| "stats_order = [params[\"pred_cols\"][x] for x in indices]\n", |
| "\n", |
| "plt.xticks(range(marvin_dataset['X_train'].shape[1]), stats_order, rotation='vertical')\n", |
| "plt.xlim([-1, marvin_dataset['X_train'].shape[1]])\n", |
| "plt.show()" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Prediction Preparator" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 15, |
| "metadata": {}, |
| "outputs": [], |
| "source": [ |
| "# put this values in engine.messages to be used as dryrun samples\n", |
| "# age, class, sex\n", |
| "# reminder: 'male': 1, 'female': 0\n", |
| "input_message = {\"age\": 50, \"class\": 3, \"sex\": 0, \"fare\": 5}" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 16, |
| "metadata": { |
| "marvin_cell": "ppreparator" |
| }, |
| "outputs": [], |
| "source": [ |
| "# Given the input: input_message = {\"age\": 50, \"class\": 3, \"sex\": 0}\n", |
| "# Transform the message into a correctly ordered list for the model\n", |
| "\n", |
| "key_order = {\"age\":0, \"class\":1, \"sex\":2, \"fare\":3}\n", |
| "input_message = [input_message[i] for i in sorted(input_message, key=key_order.__getitem__)]" |
| ] |
| }, |
| { |
| "cell_type": "markdown", |
| "metadata": {}, |
| "source": [ |
| "# Predictor" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": 17, |
| "metadata": { |
| "marvin_cell": "predictor" |
| }, |
| "outputs": [ |
| { |
| "name": "stdout", |
| "output_type": "stream", |
| "text": [ |
| "{'prediction_svm': 1, 'prediction_rf': 0}\n" |
| ] |
| } |
| ], |
| "source": [ |
| "final_prediction = {\n", |
| " \"prediction_rf\": marvin_model['rf'].predict([input_message])[0],\n", |
| " \"prediction_svm\": marvin_model['svm'].predict([input_message])[0]\n", |
| "}\n", |
| "\n", |
| "print(final_prediction)" |
| ] |
| }, |
| { |
| "cell_type": "code", |
| "execution_count": null, |
| "metadata": {}, |
| "outputs": [], |
| "source": [] |
| } |
| ], |
| "metadata": { |
| "kernelspec": { |
| "display_name": "Python 2", |
| "language": "python", |
| "name": "python2" |
| }, |
| "language_info": { |
| "codemirror_mode": { |
| "name": "ipython", |
| "version": 2 |
| }, |
| "file_extension": ".py", |
| "mimetype": "text/x-python", |
| "name": "python", |
| "nbconvert_exporter": "python", |
| "pygments_lexer": "ipython2", |
| "version": "2.7.6" |
| } |
| }, |
| "nbformat": 4, |
| "nbformat_minor": 1 |
| } |