{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "# Feature Engineering\n", "## Einfuehrung\n", "## Exploration\n", "## Transformation\n", "## Konstruktion\n", "## Selektion\n", "### Automatische Feature Selektion" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "## preparation: import libraries and read data\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns; sns.set()\n", "%matplotlib inline\n", "\n", "datapath = '../3_data'\n", "from os import chdir; chdir(datapath)\n", "\n", "data = pd.read_csv('bank_data.csv', sep=';')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Univariate Methoden" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-02-22T12:15:17.098501Z", "start_time": "2020-02-22T12:15:16.948647Z" } }, "outputs": [], "source": [ "## remove rows with missing values\n", "tmp_data = data.dropna()\n", "\n", "## features - target - split\n", "X = tmp_data.drop('y', axis=1)\n", "y = tmp_data['y']\n", "\n", "## numerical features only\n", "X = X._get_numeric_data()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-02-22T12:15:17.881491Z", "start_time": "2020-02-22T12:15:17.106232Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "## grouped boxplots\n", "f, axes = plt.subplots(nrows=1, ncols=3, figsize=(12, 4), sharex=False)\n", "sns.boxplot(x=y, y=tmp_data['age'], ax=axes[0])\n", "sns.boxplot(x=y, y=np.log10(tmp_data['duration'] + 1), ax=axes[1])\n", "sns.boxplot(x=y, y=np.log10(tmp_data['campaign'] + 1), ax=axes[2]);" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2020-02-22T12:15:17.948550Z", "start_time": "2020-02-22T12:15:17.888480Z" }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "F-Statistik\n", "age : 12.549987176912808\n", "duration : 191.69044031601936\n", "campaign : 12.366212567906711\n" ] } ], "source": [ "## ANOVA (Analysis of variance) for three selected features\n", "import scipy.stats as stats\n", "print('F-Statistik')\n", "print('age :',\n", " stats.f_oneway(tmp_data['age'][y == 'yes'], tmp_data['age'][y == 'no'])[0])\n", "print(\n", " 'duration :',\n", " stats.f_oneway(tmp_data['duration'][y == 'yes'],\n", " tmp_data['duration'][y == 'no'])[0])\n", "print(\n", " 'campaign :',\n", " stats.f_oneway(tmp_data['campaign'][y == 'yes'],\n", " tmp_data['campaign'][y == 'no'])[0])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2020-02-22T12:15:19.148965Z", "start_time": "2020-02-22T12:15:17.954861Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " index mask\n", "0 age False\n", "1 duration True\n", "2 campaign False\n", "3 pdays True\n", "4 previous False\n", "5 emp.var.rate False\n", "6 cons.price.idx False\n", "7 cons.conf.idx True\n", "8 euribor3m True\n", "9 nr.employed True\n" ] } ], "source": [ "## identify the 5 most important features, using sklearn.feature_selection.SelectKBest\n", "from sklearn.feature_selection import SelectKBest\n", "select = SelectKBest(k=5)\n", "select.fit(X, y)\n", "mask = select.get_support()\n", "## check\n", "print(pd.DataFrame({\n", " 'index': X.columns,\n", " 'mask': pd.Series(mask)}))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2020-02-22T12:15:19.180631Z", "start_time": "2020-02-22T12:15:19.152402Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Index: 1832 entries, 10 to 9867\n", "Data columns (total 5 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 duration 1832 non-null float64\n", " 1 pdays 1832 non-null int64 \n", " 2 cons.conf.idx 1832 non-null float64\n", " 3 euribor3m 1832 non-null float64\n", " 4 nr.employed 1832 non-null float64\n", "dtypes: float64(4), int64(1)\n", "memory usage: 85.9 KB\n", "None\n" ] } ], "source": [ "## use _mask_ as filter criteria\n", "X_red = X.loc[:, mask]\n", "print(X_red.info())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Modellbasierte Feature Selektion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "vgl. Präs. und FE_7_Nachträge" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Iterative Feature Selektion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "vgl. Präs. und FE_7_Nachträge" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Feature Selektion mit Expertenwissen" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "vgl. Präs. und FE_7_Nachträge" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.0" }, "toc": { "base_numbering": "1.5", "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "1.5 Feature Engineering - Selektion", "title_sidebar": "Contents", "toc_cell": true, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "180.6px" }, "toc_section_display": true, "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "oldHeight": 217.64999999999998, "position": { "height": "238.85px", "left": "802.2px", "right": "20px", "top": "116px", "width": "326.8px" }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "varInspector_section_display": "block", "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }