blob: 1948463e67976582c36170e3e4e0debe870da4b3 [file] [log] [blame]
{
"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
}