From 3d4e69833efb8824af9ad61d0d27e5ef0bf85273 Mon Sep 17 00:00:00 2001 From: silil Date: Sun, 30 Jun 2019 23:18:24 +0100 Subject: [PATCH] cyclical features --- ...feature_engineering_cyclic_variables.ipynb | 440 ++++++++++++++++++ 1 file changed, 440 insertions(+) create mode 100644 sources/curriculum/3_modeling_and_machine_learning/machine-learning/feature_engineering_cyclic_variables.ipynb diff --git a/sources/curriculum/3_modeling_and_machine_learning/machine-learning/feature_engineering_cyclic_variables.ipynb b/sources/curriculum/3_modeling_and_machine_learning/machine-learning/feature_engineering_cyclic_variables.ipynb new file mode 100644 index 00000000..d37eab08 --- /dev/null +++ b/sources/curriculum/3_modeling_and_machine_learning/machine-learning/feature_engineering_cyclic_variables.ipynb @@ -0,0 +1,440 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Feature engineering \n", + "\n", + "#### Cyclical features\n", + "\n", + "Variables normally treated as ordinals but that represents a cycle:\n", + "\n", + "+ Time: minutes, hours, seconds\n", + "+ Day of the week\n", + "+ Month of the year\n", + "+ Week of the month\n", + "+ Week of the year\n", + "+ Season\n", + "\n", + "Most of the times when we want to use these kind of features in an algorithm we use their ordinal representation. By doing this, we lack to include their nature of being part of a cycle and so to configure that the first value of a cyclical feature is **near** the last value of the same variable. For example: \n", + "\n", + "- December is near January\n", + "- 23:00 is near 3:00 \n", + "- Sunday is near Monday\n", + "\n", + "The best way to deal with these kind of variables is to make a transformation that includes this characteristics of being cyclical using the Sine and Cosine wave functions. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-30T21:58:25.138148Z", + "start_time": "2019-06-30T21:58:25.121908Z" + } + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-30T22:11:04.541748Z", + "start_time": "2019-06-30T22:11:04.009077Z" + }, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5,0,'observation number')" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# generate some random hours\n", + "hours = list(np.random.choice(a=24, size=15, replace=False))\n", + "df = pd.DataFrame({'hour': hours})\n", + "# to visualize it better\n", + "df = df.sort_values('hour').reset_index(drop=True)\n", + "\n", + "df.plot()\n", + "plt.ylabel('hour')\n", + "plt.xlabel('observation number')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lest get the sine and cosine for each hour." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-30T21:58:26.205447Z", + "start_time": "2019-06-30T21:58:26.149449Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hoursin_hrcos_hr
000.000000e+001.000000
125.000000e-010.866025
248.660254e-010.500000
359.659258e-010.258819
479.659258e-01-0.258819
588.660254e-01-0.500000
697.071068e-01-0.707107
7105.000000e-01-0.866025
8112.588190e-01-0.965926
9121.224647e-16-1.000000
1014-5.000000e-01-0.866025
1119-9.659258e-010.258819
1220-8.660254e-010.500000
1321-7.071068e-010.707107
1422-5.000000e-010.866025
\n", + "
" + ], + "text/plain": [ + " hour sin_hr cos_hr\n", + "0 0 0.000000e+00 1.000000\n", + "1 2 5.000000e-01 0.866025\n", + "2 4 8.660254e-01 0.500000\n", + "3 5 9.659258e-01 0.258819\n", + "4 7 9.659258e-01 -0.258819\n", + "5 8 8.660254e-01 -0.500000\n", + "6 9 7.071068e-01 -0.707107\n", + "7 10 5.000000e-01 -0.866025\n", + "8 11 2.588190e-01 -0.965926\n", + "9 12 1.224647e-16 -1.000000\n", + "10 14 -5.000000e-01 -0.866025\n", + "11 19 -9.659258e-01 0.258819\n", + "12 20 -8.660254e-01 0.500000\n", + "13 21 -7.071068e-01 0.707107\n", + "14 22 -5.000000e-01 0.866025" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "HOURS = 24\n", + "\n", + "df['sin_hr'] = np.sin(2*np.pi*df.hour/HOURS)\n", + "df['cos_hr'] = np.cos(2*np.pi*df.hour/HOURS)\n", + "\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you only use the sine transformation you will end up having 2 different values for each point of your original cyclical feature. For example, the sine transformation for the 11:00 hour corresponds to 0.25, but have to different values on the sine wave (if you use the 24 different values for an hour your sine wave will look prettier)." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-30T21:59:10.538782Z", + "start_time": "2019-06-30T21:59:09.957189Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5,1,'sine transformation')" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.sin_hr.plot()\n", + "plt.hlines(0.25, 0, 14, colors='r')\n", + "plt.ylabel('sine')\n", + "plt.xlabel('hour of the day')\n", + "plt.title('sine transformation')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need to have only 1 value per observation, that is why we also need the cosine transformation. " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-30T21:59:16.582546Z", + "start_time": "2019-06-30T21:59:15.974686Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5,1,'cosine transformation')" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.cos_hr.plot()\n", + "plt.hlines(-0.96,0,14, color='r')\n", + "plt.ylabel('cosine')\n", + "plt.xlabel('hour of the day')\n", + "plt.title('cosine transformation')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that for the 11:00 hour we also have two different values on the cosine wave.\n", + "\n", + "But when we use both, sine and cosine as a coordinate, we end up having original values of hours near the ones that should be close, i.e. 11:00 to 12:00." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "ExecuteTime": { + "end_time": "2019-06-30T22:09:55.562464Z", + "start_time": "2019-06-30T22:09:54.959341Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5,1,'sine-cosine transformation')" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot.scatter('sin_hr', 'cos_hr').set_aspect('equal')\n", + "plt.hlines(-0.96, -1, 1, color='r') # hour 11\n", + "plt.vlines(0.25, -1, 1, color='r') # hour 11 \n", + "plt.hlines(-1, -1, 1, color='g') # hour 12\n", + "plt.vlines(0, -1, 1, color='g') # hour 12\n", + "plt.title(\"sine-cosine transformation\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The same transformation can be used for all the cyclical features mentioned before. In this way you will preserve important information about these features in your algorithms." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}