2150 lines
2.5 MiB
Text
2150 lines
2.5 MiB
Text
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {
|
||
|
"collapsed": true,
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.490872600Z",
|
||
|
"start_time": "2023-05-23T15:03:31.335852800Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# Import libraries\n",
|
||
|
"import warnings\n",
|
||
|
"import pandas as pd\n",
|
||
|
"import psutil\n",
|
||
|
"import sklearn\n",
|
||
|
"from statsmodels.tsa.seasonal import seasonal_decompose\n",
|
||
|
"import numpy as np\n",
|
||
|
"import seaborn as sns\n",
|
||
|
"import matplotlib.pyplot as plt\n",
|
||
|
"from sklearn.neural_network import MLPRegressor\n",
|
||
|
"from sklearn.neighbors import KNeighborsRegressor\n",
|
||
|
"from sklearn.svm import SVR\n",
|
||
|
"from sklearn.ensemble import RandomForestRegressor\n",
|
||
|
"from sklearn.tree import DecisionTreeRegressor\n",
|
||
|
"from sklearn.linear_model import LinearRegression\n",
|
||
|
"from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Data Preprocessing"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.602527800Z",
|
||
|
"start_time": "2023-05-23T15:03:31.341863900Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Month Sunspots\n0 1749-01 58.0\n1 1749-02 62.6\n2 1749-03 70.0\n3 1749-04 55.7\n4 1749-05 85.0",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Month</th>\n <th>Sunspots</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1749-01</td>\n <td>58.0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1749-02</td>\n <td>62.6</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1749-03</td>\n <td>70.0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1749-04</td>\n <td>55.7</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1749-05</td>\n <td>85.0</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Load the dataset\n",
|
||
|
"df = pd.read_csv('data/monthly-sunspots.csv')\n",
|
||
|
"df.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 3,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.606057600Z",
|
||
|
"start_time": "2023-05-23T15:03:31.356761100Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "(2820, 2)"
|
||
|
},
|
||
|
"execution_count": 3,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df.shape"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 4,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.620646700Z",
|
||
|
"start_time": "2023-05-23T15:03:31.372281Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Month Sunspots\n0 1749-01-01 58.0\n1 1749-02-01 62.6\n2 1749-03-01 70.0\n3 1749-04-01 55.7\n4 1749-05-01 85.0",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Month</th>\n <th>Sunspots</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1749-01-01</td>\n <td>58.0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1749-02-01</td>\n <td>62.6</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1749-03-01</td>\n <td>70.0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1749-04-01</td>\n <td>55.7</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1749-05-01</td>\n <td>85.0</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 4,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# convert the date column to datetime\n",
|
||
|
"df['Month'] = pd.to_datetime(df['Month'], format='%Y-%m')\n",
|
||
|
"df.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 5,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.640457900Z",
|
||
|
"start_time": "2023-05-23T15:03:31.391365600Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Month Sunspots\n2815 1983-08-01 71.8\n2816 1983-09-01 50.3\n2817 1983-10-01 55.8\n2818 1983-11-01 33.3\n2819 1983-12-01 33.4",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Month</th>\n <th>Sunspots</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2815</th>\n <td>1983-08-01</td>\n <td>71.8</td>\n </tr>\n <tr>\n <th>2816</th>\n <td>1983-09-01</td>\n <td>50.3</td>\n </tr>\n <tr>\n <th>2817</th>\n <td>1983-10-01</td>\n <td>55.8</td>\n </tr>\n <tr>\n <th>2818</th>\n <td>1983-11-01</td>\n <td>33.3</td>\n </tr>\n <tr>\n <th>2819</th>\n <td>1983-12-01</td>\n <td>33.4</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 5,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df.tail()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 6,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.650833700Z",
|
||
|
"start_time": "2023-05-23T15:03:31.405451400Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Month Sunspots\n2815 1983-08-01 71.8\n2816 1983-09-01 50.3\n2817 1983-10-01 55.8\n2818 1983-11-01 33.3\n2819 1983-12-01 33.4",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Month</th>\n <th>Sunspots</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2815</th>\n <td>1983-08-01</td>\n <td>71.8</td>\n </tr>\n <tr>\n <th>2816</th>\n <td>1983-09-01</td>\n <td>50.3</td>\n </tr>\n <tr>\n <th>2817</th>\n <td>1983-10-01</td>\n <td>55.8</td>\n </tr>\n <tr>\n <th>2818</th>\n <td>1983-11-01</td>\n <td>33.3</td>\n </tr>\n <tr>\n <th>2819</th>\n <td>1983-12-01</td>\n <td>33.4</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 6,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df.sort_values(by='Month', inplace=False).tail()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 7,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.652831Z",
|
||
|
"start_time": "2023-05-23T15:03:31.419739700Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "144570.0"
|
||
|
},
|
||
|
"execution_count": 7,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df.Sunspots.sum()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 8,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.664342400Z",
|
||
|
"start_time": "2023-05-23T15:03:31.435752Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Sunspots\nMonth \n1749-12-31 971.1\n1750-12-31 1000.7\n1751-12-31 571.9\n1752-12-31 573.6\n1753-12-31 368.3",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Sunspots</th>\n </tr>\n <tr>\n <th>Month</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1749-12-31</th>\n <td>971.1</td>\n </tr>\n <tr>\n <th>1750-12-31</th>\n <td>1000.7</td>\n </tr>\n <tr>\n <th>1751-12-31</th>\n <td>571.9</td>\n </tr>\n <tr>\n <th>1752-12-31</th>\n <td>573.6</td>\n </tr>\n <tr>\n <th>1753-12-31</th>\n <td>368.3</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 8,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# sum by years\n",
|
||
|
"df_grouped = df.groupby(pd.Grouper(key='Month', freq='Y')).sum()\n",
|
||
|
"\n",
|
||
|
"df_grouped.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 9,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.666920300Z",
|
||
|
"start_time": "2023-05-23T15:03:31.452278400Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# set the date column as the index\n",
|
||
|
"df_indexed = df.set_index('Month', inplace=False)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"The data is already ordered by date. The first date is 1749-01-01 and the last is 1983-12-01. The sample is a month with its number of Sunspots registered. The data is a time series.\n",
|
||
|
"\n",
|
||
|
"The sunspot number is a float, this means that is either an average or it keeps track of partial sunspots that end/start in a different month. Probably the latter since the total number of sunspots is an integer. But we can't be sure. This shouldn't matter for our model training anyway. Also, the total number is even probably because the sunspots appears in pairs. This could be useful for our model.\n",
|
||
|
"\n",
|
||
|
"_Sunspots are temporary phenomena on the Sun's photosphere that appear as spots darker than the surrounding areas. They are regions of reduced surface temperature caused by concentrations of magnetic field flux that inhibit convection. Sunspots usually appear in pairs of opposite magnetic polarity. Their number varies according to the approximately 11-year solar cycle._\n",
|
||
|
"\n",
|
||
|
"_The sunspot number is a crucial component of space weather. It is a measure of solar activity, and the number of sunspots on the solar surface changes over the course of the solar cycle. The solar cycle is a periodic change in the sun's activity and appearance. The cycle is about 11 years long on average. The solar cycle is marked by the increase and decrease of sunspots on the sun's surface. During the solar maximum, large numbers of sunspots appear, and during the solar minimum, very few sunspots appear. The solar cycle affects space weather, which can affect satellites and astronauts in space. The solar cycle is also responsible for the aurora borealis, or Northern Lights, in the Northern Hemisphere. The solar cycle was discovered in 1843 by Samuel Heinrich Schwabe, who noticed that the number of sunspots visible on the sun's surface changed over time. The solar cycle is also known as the sunspot cycle or the Schwabe cycle._"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 10,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.671923Z",
|
||
|
"start_time": "2023-05-23T15:03:31.469316400Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Sunspots\ncount 2820.000000\nmean 51.265957\nstd 43.448971\nmin 0.000000\n25% 15.700000\n50% 42.000000\n75% 74.925000\nmax 253.800000",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Sunspots</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>count</th>\n <td>2820.000000</td>\n </tr>\n <tr>\n <th>mean</th>\n <td>51.265957</td>\n </tr>\n <tr>\n <th>std</th>\n <td>43.448971</td>\n </tr>\n <tr>\n <th>min</th>\n <td>0.000000</td>\n </tr>\n <tr>\n <th>25%</th>\n <td>15.700000</td>\n </tr>\n <tr>\n <th>50%</th>\n <td>42.000000</td>\n </tr>\n <tr>\n <th>75%</th>\n <td>74.925000</td>\n </tr>\n <tr>\n <th>max</th>\n <td>253.800000</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 10,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df_indexed.describe()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"The"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 11,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.671923Z",
|
||
|
"start_time": "2023-05-23T15:03:31.485354100Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"<class 'pandas.core.frame.DataFrame'>\n",
|
||
|
"DatetimeIndex: 2820 entries, 1749-01-01 to 1983-12-01\n",
|
||
|
"Data columns (total 1 columns):\n",
|
||
|
" # Column Non-Null Count Dtype \n",
|
||
|
"--- ------ -------------- ----- \n",
|
||
|
" 0 Sunspots 2820 non-null float64\n",
|
||
|
"dtypes: float64(1)\n",
|
||
|
"memory usage: 44.1 KB\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df_indexed.info()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"THere is no missing values in the dataset."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 12,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.671923Z",
|
||
|
"start_time": "2023-05-23T15:03:31.499033200Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Axes: xlabel='Sunspots'>"
|
||
|
},
|
||
|
"execution_count": 12,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 640x480 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGtCAYAAACLJXdUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAagUlEQVR4nO3de3BW9bno8ecNgSQolKuVWmccb3iFxAtoYWrFIqdlHOWitrZutcpWabWDila7UbyWXZg6tR3dp7VqRVsdqKDO4NHWo0xnVBQPotsWi45WkdaRi0qEBALr/OFJDjchsQkv8fl8ZphJ1lpZ67d+rLzvN+/KpVQURREAQFoV5R4AAFBeYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSq2zLxitXron2/uXFpVJE3749OmTfmN9dwRx3PHPc8cxxxyvHHDcfc2faFANFER12Ah25b8zvrmCOO5457njmuOPtjnPsNgEAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOQqyz2AXaUoimhsbCz3MD6zoigiIqJUKrXp40qliHXrKqOhoSH+3y46jaqqqjafLwBtlyYGGhsb4+yzTy/3MGiDmTNnRXV1dbmHAfC55zYBACSX5pWBzdXXfjuKik506hs3RI/FD0RExJrB34ro0rXMA+o4pU1NsedLvy/3MABS6UTPiO2nqKjsvE+oXbp23rG3Qif7tgaAzwW3CQAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkit7DBRFEUVRlHsYQGIeh8iurDFQFEX8x39cFZdccolPRKAsiqKIKVOuiilTrvI4RFqV5Tx4Y2NjvPbaX1verqqqLudwgIS2fhyqrvY4RD5lv00AAJSXGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAILnKcg8AYHdx9tmnt7zdrVu3OOWUMfHEE4/Fxo1NURRFdO3aLQ4//MhYsOCZGDPmk23/8IcHo1QqxXHHDYulS1+Lvn37xWuv/TX22efLsXz5u1EURXTv3j2+8Y1TYv78/x3nn39RHHPMkFi48Pm4447boiiKOPnkb8Qf//i/Wt7eervbb/95lEqlGDnyf8QTTzwWjY0NsWHDhqiurolvfvOUeOKJx1rWN+9n4sQfxjHHDNni/BYufD5+85v/atn35svvuOO22LixKRobG6OpqSkGDjw0Vq5csc22O9pPa9f/q9u3tx3NS/PcX3zxpR02tnKff0REqSiKorUbr1ixJlq/9c41NDS0fPLdd9+sqKqqbr+d7+BYa446O6JL1w47VrvbuCF6/J+ZEdEJx95Wm53rzJmzorq6466J9lIqRfTr16PdPz/4/zpyjjd/bOhIpVIpiqKIPn36xvTpP48rrrg0Vq9e1abtmtft7BgREb1794lf/OJ/tjyuNjY2xKWXXhSrVq2MPn36xm23/VdUVVVHY2NDXHLJhdsdS0Rsse2O9tNsZ+u31tbt21tr52Xr+fwstncdd/T5Nx9zZ9wmANgFmp+kV69eFdOn3/KpT7472m5nX7ttvn716lUxZ87slvfnzJndsq/N122+fHtau5/Wrt9aW7dvb62dl44aW7nPv9luc5ugoaGhQ7+qamho6Lid0yE6y/9ZqRSxbl1lh1/DmXXkHC9a9GL77nAniqKIJUv+0m7b7cicObPihBNGRETE3LmzW2KhKIqYO3d2HHbYETFnzqydjmPu3Nk73M8JJ4yIAQO+FP/4x/Idrt9aW7dvb592/E+bl/YeW7nPf3NlvU2wbt26+Ld/O6P9dthKa+q+G1HZbZcf9zPLdJugaX30WHRfuUcBnxtHHjk4Kioq4pVXFsemTZtalpdKpdhjjz2jvn7NTvdRKpVi0KDaKIoi/vu/X95iPxUVFXHkkYPjmmumxi23TN3mOM3rf/zj66NUKrUsL4oibr75ulZv3952dPyamu7x8cf12/24wYPrPvPYNr9NsGnTrjl/twkAiFdeWRyLFy/a4gkn4pMnw9aEQPO2ixcvipdffmmb/WzatCkWL14UixYt3O5xmte/++6yLZa/++6yNm3f3nZ0/E8LgYhot7GV+/y3VtbbBJtXz513zuzwbyCcMOHs5gN32HH4F232f/PrX8/sNN9A2LfvnrFyZb3bBB2ko+Z406ZNcfHF34u1az9uv53uZgYNqo1SqdQOrwzURVFs2u4rA4MG1UZd3TExeHDddr/SHTSoNvbZ58tb7HOffb7cpu3b246O371796iv/7RXBo5ql7GV+/y3ttt8z0B1dfUu/Q5Sdn/V1dWdJgZqamqiurpJDHSQjpzjSy+9LKZNu7F9d7qbqKioiAkTJkZRFDFp0sRt1l122VVx003XbvPV6fb2c8EFF213P6VSKc4//6KoqKiI88+/6FPXb/2Sd/Py1m7f3nZ0/EmTfhQ337ztvHTp0iUuuKB9xlbu89+a2wRAaocfPmiXHq9UKsUhhxzWbtvtyJgxp8feew+IAQO+FKedNr7lCaZUKsVpp42PI48c3PL7EnY0jtNOG7/D/ey994CIiJ2u31pbt29vn3b8QYO2Py/tPbZyn//mxADAZ9K2r9yaH/D79OkTkydfE71792nzdjv7anHz9X369IkxY8a3vD9mzPiWfW2+bvPl29Pa/bR2/dbaun17a+289OnTt0PGVu7zbyYGALajW7duMW7cmdGjR8/o3r171NTURM+eX4jjjx8eFRUVMW7cGTFu3JkR8cmT8PHHD49+/frHwIGHRsQn94Sbn5y7d+8eY8eeEf369Y8LLpgYPXt+If79378fPXt+IXr06Bnjxp3Z8vb2tuvRo2f07PmFGDv2jOjRo2d069YtSqVS1NR0bxlj8/rm/UyY8P0tbr1WVVXHhAkTW/bdvK6qqrplLHvssUdUVn5y93jgwEO32XZH+2nt+q21dfv2trN5aZ7bCRM6ZmzlPv9mfgNhZ5DpRwv9BkK2Y1f9BsLOcs11BNdxxyvHHPvRQgCgVcQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYk
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# print a boxplot\n",
|
||
|
"sns.boxplot(x=df_indexed['Sunspots'])"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Also, no extreme values are present."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Data Visualization\n",
|
||
|
"\n",
|
||
|
"Since the data is a time series, we can plot the data to see how the sunspots have changed over time. I will use the seaborn library to plot the data. Since the result is better than matplotlib.\n",
|
||
|
"\n",
|
||
|
"- Trend Component: It represents the long-term pattern or trend in the data. It shows the overall direction or tendency of the data over an extended period. The trend component indicates whether the series is increasing, decreasing, or remaining relatively stable.\n",
|
||
|
"\n",
|
||
|
"- Seasonal Component: It represents the repetitive pattern or seasonality in the data. It captures the periodic fluctuations that occur over a specific time period, such as daily, weekly, or yearly patterns.\n",
|
||
|
"\n",
|
||
|
"- Residual Component: It represents the remaining or leftover variation in the data after removing the seasonal and trend components. It consists of the random fluctuations, noise, or irregularities that cannot be explained by the seasonal or trend patterns."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 13,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:31.989653200Z",
|
||
|
"start_time": "2023-05-23T15:03:31.627142900Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 640x480 with 1 Axes>",
|
||
|
"image/png": "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ra2NCx9//etf0draio9//OOIxWJYuHAhTj75ZNx9990AgPvuuw8nnXQSDj30UMTjcXz6059GW1sbHnvsMeUL1jT7n2pk2bLnsGjRMRgY6AdgCFF77bU3vvCF/8Ls2XOwZs1qRCIRZDIZ/p7+/j7p9tetW4ujjjoWt912Jx599O/48IdPxrXXXoWhIaMA4c6dO4tev3XrFkyZMhVTp04DAGzevIk/l8vlsH37NnR2dpZ8zoYN72LOnP3x85/fhscffxKf+9yFuOmm7+Ktt9a7Xp9TX47XTyVcA/1QH02EH+qn4D/9ycyYro/l7iMZpDUke++9N37zm98UPbZ06VLMnTsXa9euxb777lv03KxZs3D//fcDANatW4clS5aUPL9q1SrZj+d0dDSVPJZMJtHTE0E0qiEWqwy3GJnrOPTQQ9He3oEbb/wmPv/5L2LPPfdEKpXG008/hU2bNuKYY47Bq68ux7///S+cdNJHMDw8hPvvv4e3H40anxGNRvjnRSIaNM24D48++hBWr16F733vh2hra0NTUxPq6+tRV1eDSETDG2+sxN/+9hd88IP/D8uWPY9nnnkKP//5rzB16mS8971H45ZbbsI3vvFtNDQ04te//iXy+RyOPfZ9iMUiqKmpwejoMGKxCJ577hn83//9CT/5yS8wbdo0tLe3IRqNobW12fY+5PMaIpEI2toaUFtbG+JdV8duPBGVBfVRdUD9FIx4T7Lo/87O8O9npfeRrygbXdfx4x//GE8++STuuusu3HnnnSWml9raWoyMGCqo4eFh1+dV6O4ehG4ppJvJpJHP55HL6RVR1E62uF4slsDPf/4b/Pa3v8Lll38Zvb09iMfjmDv3IPzoRz/HjBl74vOfvxg//OF3cdJJi9DZOQlnnPExvPrqK8hm88jljM/I5fL88/J5Hbpu3IcLLrgIN9/8PZxzzulIpVKYOXMv3HjjDxGNxpHP65g9e1889dQ/8cMffh8dHR34+te/if33PxDZbB7XXPMN/PKXP8WnPnUORkdHMXfuPPzkJ7eioaEJ2WweJ510Cn75y5/hjTfewNVXX4cdO7bjc5/7NIaHhzB16jR885vfQXv7JNv7kMvpyOfz6O0dRjyeKXl+PNA0Y3LajSeiMqA+qg6on8Jhw/biqNCursHQ2i53H7HP90JZIBkaGsJVV12FN954A3fddRfmzJmDuro6DA4W37xkMomGhgYAQF1dHZLJZMnzslEkIrqOkhtazZOgs7MTV175347P7733Pvj5z28reuzUUw1t0267TcMzz7xU9NxnP/t5/nd9fT2uueYbjm03NDTiW9+yj4Zpbm7BV796jeN7zznnUzjnnE/x/y+++DJcfPFljq+3w64vx5tKuAbCHeqj6oD6KRi9I+bhrLEmOib3stL7SMm+sWHDBixZsgRDQ0O4//77MWfOHADAvvvui7Vr1xa9dt26dZg9ezYAYPbs2a7PEwRBEMSuzGgmx/+e3dlQxispH9ICSX9/P84991wccsghuP3229He3s6fW7RoEbq6unDHHXcgk8ng+eefx8MPP8z9Rk4//XQ8/PDDeP7555HJZHDHHXegu7sbixYtCv8bEQRBEESVIaapyOYrWI0xhkibbB544AFs2bIFf/nLX/D4448XPbdixQr89re/xbe//W3ccsstaG9
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# get rolling mean on a year basis\n",
|
||
|
"rolling_mean = df_indexed.rolling(window=12).mean().plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 14,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:32.760153700Z",
|
||
|
"start_time": "2023-05-23T15:03:31.841726700Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 4 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"result = seasonal_decompose(df_indexed, model='additive')\n",
|
||
|
"sns.set(rc={'figure.figsize':(11, 4)})\n",
|
||
|
"ax = result.plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 15,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:33.684262300Z",
|
||
|
"start_time": "2023-05-23T15:03:32.763199600Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 4 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# same but in a shorted range\n",
|
||
|
"df_short = df_indexed['1820-01-01':'1870-01-01']\n",
|
||
|
"result = seasonal_decompose(df_short, model='additive')\n",
|
||
|
"sns.set(rc={'figure.figsize':(11, 4)})\n",
|
||
|
"ax = result.plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"We can see a *trend* which start at 0 sunspots and increase to some number of sunspots. Then it decrease to 0 sunspots again. Graphically, this is a cycle seems to be around 10 years. We know that it is 11 years.\n",
|
||
|
"\n",
|
||
|
"The *seasonal* component has a variance between -2.5 and 2.5.\n",
|
||
|
"\n",
|
||
|
"The *residual* component is the noise around the trend and seasonal component."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 16,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.393802900Z",
|
||
|
"start_time": "2023-05-23T15:03:33.681261500Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 4 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# zooming a specific trend\n",
|
||
|
"df_trend = df_indexed['1832-01-01':'1844-01-01']\n",
|
||
|
"result = seasonal_decompose(df_trend, model='additive')\n",
|
||
|
"# plot with sns\n",
|
||
|
"sns.set(rc={'figure.figsize':(11, 4)})\n",
|
||
|
"ax = result.plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"The residual component is the noise around the trend and seasonal component. It is vary between -50 and 50.\n",
|
||
|
"\n",
|
||
|
"# Fourier Transform\n",
|
||
|
"\n",
|
||
|
"Apply the Fourier transformation and find the periodicity of the data.\n",
|
||
|
"\n",
|
||
|
"The Fourier transform is a mathematical function that takes a time-based pattern as input and determines the overall cycle offset, rotation speed, and strength for every possible cycle in the given pattern. The Fourier transform is used to find the cyclic patterns hidden in the time series data.\n",
|
||
|
"\n",
|
||
|
"I will calculate the periodicity on the train set to avoid test bias."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 17,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "((2052, 1), (768, 1))"
|
||
|
},
|
||
|
"execution_count": 17,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df_train = df_indexed['1749-01-01':'1919-12-01']\n",
|
||
|
"df_test = df_indexed['1920-01-01':'1983-12-01']\n",
|
||
|
"\n",
|
||
|
"df_train.shape, df_test.shape"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false,
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.456506Z",
|
||
|
"start_time": "2023-05-23T15:03:34.393802900Z"
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 18,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.456506Z",
|
||
|
"start_time": "2023-05-23T15:03:34.410714100Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "(2052,)"
|
||
|
},
|
||
|
"execution_count": 18,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Apply Fourier transformation\n",
|
||
|
"fourier_transform = np.fft.fft(df_train['Sunspots'])\n",
|
||
|
"fourier_transform.shape"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 19,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.457503900Z",
|
||
|
"start_time": "2023-05-23T15:03:34.425259800Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "array([93338.8 +0.j , 1468.1036331 -212.88095452j,\n -1264.72141466-17793.04535383j, -7928.54620491 +6239.67068341j,\n 7122.83407343 +3535.55795089j, 555.94555365 +206.05242238j,\n 3791.90814354 -5119.83490291j, 1853.86932136 +4123.29141588j,\n 3675.5880518 +5597.02967995j, 963.21680018 -2620.91520629j])"
|
||
|
},
|
||
|
"execution_count": 19,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"fourier_transform[0:10]"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 20,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.457503900Z",
|
||
|
"start_time": "2023-05-23T15:03:34.440149500Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "(2052,)"
|
||
|
},
|
||
|
"execution_count": 20,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Compute the frequencies corresponding to the Fourier coefficients\n",
|
||
|
"n = len(df_train['Sunspots'])\n",
|
||
|
"frequencies = np.fft.fftfreq(n)\n",
|
||
|
"\n",
|
||
|
"frequencies.shape"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 21,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.475078300Z",
|
||
|
"start_time": "2023-05-23T15:03:34.455588800Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "array([0. , 0.00048733, 0.00097466, 0.00146199, 0.00194932,\n 0.00243665, 0.00292398, 0.00341131, 0.00389864, 0.00438596])"
|
||
|
},
|
||
|
"execution_count": 21,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"frequencies[0:10]"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 22,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.530697200Z",
|
||
|
"start_time": "2023-05-23T15:03:34.471078800Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Periodicity = 0.0\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Find the periodicity (frequency with the highest amplitude)\n",
|
||
|
"periodicity = np.abs(frequencies[np.argmax(np.abs(fourier_transform))])\n",
|
||
|
"print('Periodicity =', periodicity)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 23,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.544210600Z",
|
||
|
"start_time": "2023-05-23T15:03:34.486900600Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Periodicity: inf time units\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_82340\\2936873598.py:1: RuntimeWarning: divide by zero encountered in scalar divide\n",
|
||
|
" print(f\"Periodicity: {1 / periodicity} time units\")\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"print(f\"Periodicity: {1 / periodicity} time units\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"A periodicity of \"infinite\" is not what we would expect."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 24,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.631111800Z",
|
||
|
"start_time": "2023-05-23T15:03:34.501423400Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Plot the Fourier transform\n",
|
||
|
"plt.figure(figsize=(12, 4))\n",
|
||
|
"plt.plot(frequencies, np.abs(fourier_transform))\n",
|
||
|
"plt.xlabel('Frequency')\n",
|
||
|
"plt.ylabel('Amplitude')\n",
|
||
|
"plt.xlim(0, 0.02)\n",
|
||
|
"plt.show()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"The code return a very high periodicity near 0. But this is wrong, the periodicity we want is the second peak we see. so I will recalculate the argmax but ignoring the first peak."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 25,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.647142600Z",
|
||
|
"start_time": "2023-05-23T15:03:34.628110800Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Periodicity = 136.8\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Find the periodicity (frequency with the highest amplitude)\n",
|
||
|
"threshold = 5\n",
|
||
|
"\n",
|
||
|
"max_index = np.argmax(np.abs(fourier_transform[threshold:])) + threshold\n",
|
||
|
"\n",
|
||
|
"periodicity = 1 / np.abs(frequencies[max_index])\n",
|
||
|
"\n",
|
||
|
"print('Periodicity =', periodicity)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"source": [
|
||
|
"This means a periodicity if 136.8 months. Which is 11.4 years. This is the expected periodicity of the sunspots.\n",
|
||
|
"\n",
|
||
|
"For the future engineering, I will use the periodicity of 11.4 years.\n",
|
||
|
"\n",
|
||
|
"I will also calculate the periodicity of the seasonality.\n"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 26,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Axes: xlabel='Month'>"
|
||
|
},
|
||
|
"execution_count": 26,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA5MAAAF3CAYAAAA4pR80AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACDZUlEQVR4nO2deZhcZZX/v7f26r076SWkIYQEyMJiAklYAkFAZaLigjLqwKCggvwEQURAUAji6ACKIDBBFhdmXAZHkWEiKOqAYCQhhmXICmRfurN0p9fa7++Pqntrr7r3VlXXqVvfz/PwGKurqm/Vqffz9nvqvOdVVFVVQQghhBBCCCGEmMBR7QsghBBCCCGEEFJ7cDFJCCGEEEIIIcQ0XEwSQgghhBBCCDENF5OEEEIIIYQQQkzDxSQhhBBCCCGEENNwMUkIIYQQQgghxDRcTBJCCCGEEEIIMQ0Xk4QQQgghhBBCTOOq9gVUAlVVEYup1b4M2+FwKHxfBcP4yIWxkQtjIxvGRy6MjVwYG9nUSnwcDgWKohS9ny0Xk7GYioMHR6t9GbbC5XKgvb0RQ0NjiERi1b4ckgHjIxfGRi6MjWwYH7kwNnJhbGRTS/Hp6GiE01l8MckyV0IIIYQQQgghpuFikhBCCCGEEEKIabiYJIQQQgghhBBiGi4mCSGEEEIIIYSYhotJQgghhBBCCCGm4WKSEEIIIYQQQohpKr6YfPDBB3HxxRcXvM/AwACuu+46LFiwAAsWLMDXv/51jI2NVfrSCCGEEEIIIYRYpKKLyR//+Me47777it7v6quvxo4dO/T7v/TSS1i2bFklL40QQgghhBBCSAm4KvGkfX19uPnmm7FmzRpMnz694H3Xrl2LVatWYcWKFZgxYwYA4Pbbb8dnP/tZfPnLX0Z3d3clLpEQQgghhBBCSAlUZDH55ptvorW1FU899RQeeOAB7Nq1K+99X3nlFXR2duoLSQBYuHAhFEXBmjVrsHTpUkvX4HJxO2g5cTodaf9LZMH4yIWxkQtjIxvGRy6MjVwYG9nYMT4VWUyeffbZOPvssw3dt6+vD1OmTEm7zePxoK2tDXv27LH0+x0OBe3tjZYeSwrT0uKv9iWQAjA+cmFs5MLYyIbxkQtjIxfGRjZ2ik9FFpNmGB8fh8fjybrd6/UiGAxaes5YTMXQkPUGPrv3j+KXf9yMD50xHUcd1mr5eeyE0+lAS4sfQ0PjiEZjVbuOmKri0afXYVp3M9678IiqXYc0pMTnL6/txutvH8Dnzp8Dj8tZteuQhJTY0GvZSIkNvZYbKfGh17KREht6LRspsaHXciMlPka81tLiN/QNatUXkz6fD6FQKOv2YDCIhoYGy88biVgP0Iuv78bazfvR3ODGEV3Nlp/HjkSjsZLe21LZ3jeMv7y2B6949+Hs+b1Vuw6pVDs+T724BX0D4zj9+B4cN31S1a5DItWODb2Wn2rHhl4rTLXjQ6/lp9qxodfyU+3Y0GuFqXZ8yum1qhfs9vT0oL+/P+22UCiEwcHBqjXfGR4LAwCGRsNV+f0kP8Pj8ZiMByMIR6JVvhqSSXLsZCeISHWh1+RCr8mGXpMLvSYXek025fRa1ReTCxYswN69e7Ft2zb9tpdffhkAMH/+/Kpc00jiDT7EiUMcWmwAxkca0VgMY8EIAE7sEqHX5EKvyYVekw29Jhd6TS7l9tqELyaj0Sj27duHQCAAADjxxBMxf/58XHvttXj99dfxt7/9Dbfeeis+/OEPV+2byZFENmV4jB9+aWixAZJZFSKD0fGI/u8hjh1x0GtyodfkQq/Jhl6TC70ml3J7bcIXk3v27MHixYuxYsUKAICiKLj//vvR29uLSy65BNdccw3OPPNM3HbbbRN9aTojgeRXv6qqVu06SDaj48x0SSV14mA5mDzoNbnQa3Kh12RDr8mFXpNLub1W8QY83/nOd9L+f29vLzZu3Jh226RJk3DfffdV+lIMo301H4rEEAhF4fdWvU8RSTDMiV0s/KNLNvSaXOg1udBrsqHX5EKvyaXcXqv6nklpqKqa8dU8B4AkRhkbsaTJibERBb0mG3pNLvSaXOg12dBrcim317iYzCAQiiIaS5ZKcMO9LEZYNiEWZvDlQq/Jhl6TC70mF3pNNvSaXPjNZIVJfYMBDgBpcEO3XEYzYhPj/hUx0GuyodfkQq/JhV6TDb0ml3J7jYvJDDLlxK/mZcEssVxS90dEYyrGApEC9yYTCb0mG3pNLvSaXOg12dBrcim317iYzGA0Q04cALKgnOSSObEzPnKg12RDr8mFXpMLvSYbek0u5fYaF5MZZL3BzHSJIRKNd2vTYGxkkTmxM0ssB3pNLvSabOg1udBrcqHXZFNur3ExmcEwM11iyZw4RsbCiMZiVboakknm2OH+FTnQa3Kh12RDr8mFXpMLvSabcnuNi8kMtNV6k98NgHKShCanBq8LCgAVyTOmSPXh2JELYyMXek02HDtyYWzkQq/Jptxjh4vJDLQBcNikBgDAED/8YtA+/C2NHjQ1JAYA4yMGjh25MDZyoddkw7EjF8ZGLvSabMo9driYzEB/gyc3AmCmSxJaa+kmvxstDR4AjI8UYimHR3PsyIOxkQu9Jhd6TTaMjVzoNblUwmtcTGagvcFTEm/wWDCCcIR13hIYCaTIqTEhJ27qFsF4MALtmKIpkzixS4Nekwu9Jhd6TTb0mlzoNblUwmtcTGagyam73Q+nQwHA7m1SSK3x1uXEiV0E2rjxepzoaPEB4LiRBL0mF3pNLvSabOg1udBrcqmE17iYzGBEHwAeNOt13hwAEhhJkZMeG8pJBHpsfG60NMZjw66HcqDX5EKvyYVekw29Jhd6TS6V8BoXkxkkB4ArJZvCTcMS0DqBNfpdaGXZhChGxrKzkMPcbC8Gek0u9Jpc6DXZ0GtyodfkUgmvuUq+KhsRjkQRCsfr7Zv8Hm4aFoY2cTQ3eKAkbuPEIYO0ST0xboLhKIKhKLweZzUvre6h12RDr8mFXpMLvSYbek0ulfAav5lMYWQ8AgBwOhT4vU5uGhaGtqG70edGM2MjCn1/RIMHPo8TbldcLYcYn6pDr8mGXpMLvSYXek029JpcKuE1LiZT0DagNvpcUBSFm4aFkfxqPqVsgrERwXBKDb6iKHq2a5jxqTr0mmzoNbnQa3Kh12RDr8mlEl7jYjIFbbXe6I9vSNXLJphNEUGuDd3DYyGoWo9jUjWSYydeOa9t6ubkUX3oNdnQa3Kh1+RCr8mGXpNLJbzGxWQKI4F42USzJidOHGKIxVSMJeLT1ODRM12RqIrxYKSal0aQvj8CSE7sLAerPvSaXOg12dBrcqHX5EKvyaYSXuNiMoURrWxClxO7g0lhLBiBls9q9Lngdjnh98Y3CrNVe/UZycp0sRxMCvSaXOg12dBrcqHX5EKvyaYSXuNiMoXUr+UBlk1IQtsf4fc64XLGP7bN7N4mhqyxw4ldDPSaXOg12dBrcqHX5EKvyaYSXuNiMgWtO1hTQ/obPDwWQox13lVlVItN4sMPgOd+CYITu1zoNbnQa7Kh1+RCr8mFXpNNJbzGxWQKmW+w9r+qmvwZqQ6ZsQGAVq3Om5muqqKqanJiz8p0MTbVhl6TC70mF3pNNvSaXOg1uVTKa1xMpqAPAF/8DXY5HfqbzcmjugyPp++PAKCfXTTMLHFVCYajiES1w6O1TFdi3DA2VYdekwu9Jhd6TTb0mlzoNblUymtcTKagy6khx1fzlFNV0commlPLJho4cUhAGzcupwKvO77Jnhl8OdBrcqHX5EKvyYZekwu9JpdKeY2LyRRGc3w1rw0AtgKvLsnuU9kTB8smqkvq/ghFUQAks5CjgYieBSPVgV6TC70mF3pNNvSaXOg1uVTKa1xMpjCcS07s3iaCXDX42qZhbuiuLrli0+R3w5EQFeNTXeg1udBrcqHXZEOvyYVek0ulvMbFZIJoLKYfpppW593AOm8J5JQTS45EoO2PSI2NQ1HQzLKWqkOvyYZekwu9Jhd6TTb0mlwq5TUuJhNoX/0qiB+yqsGv5mVQSE4saaku2thJndSBlHOlGJ+qQa/Jhl6
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Plot the Fourier transform but this time only for the seasonality\n",
|
||
|
"result_season = seasonal_decompose(df_train, model='additive').seasonal\n",
|
||
|
"result_season.iloc[50:150].plot()"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false,
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.860214800Z",
|
||
|
"start_time": "2023-05-23T15:03:34.642631300Z"
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 27,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABAAAAAF4CAYAAADKVIuIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABHDElEQVR4nO3deXhU5d3/8c8sZCdkaSCID0qjGEBWicZWCqI8tlKVmD61rZHKJgqCSwVUUKSIqFCobFYlKGpt0IJUEdsfLi1WeRCw6qMBNxAVCFEIiQSSMDPn90eYSSaZLENmycx5v67Li+ScM5P72C+x5zP3/b0thmEYAgAAAAAAUc0a7gEAAAAAAIDgIwAAAAAAAMAECAAAAAAAADABAgAAAAAAAEyAAAAAAAAAABMgAAAAAAAAwAQIAAAAAAAAMAECAAAAAAAATIAAAAAAAAAAE7CHewCStH79ej3++OP6+uuv1b17d91888362c9+JknauXOn5s2bp48++kgpKSm67rrrNG7cOM9rXS6Xli1bphdeeEEVFRU677zzNHv2bJ1xxhmnPB7DMORyGW2+L6A9s1ot1DmiHnUOM6DOYQbUOaKd1WqRxWIJ+s8JewDwt7/9TXfffbdmzJihYcOGacOGDbr99tuVmZmpM888U2PGjNGll16qOXPm6P3339ecOXOUkpKi/Px8SdKKFStUVFSk+fPnq0uXLlqwYIEmTJigDRs2KCYm5pTGZLFYVFFxTA6HK5C3CrQbdrtVqamJ1DmiGnUOM6DOYQbUOcwgLS1RNlvwAwCLYRhhi9IMw9All1yiyy67TDNmzPAcHzdunM4//3xJ0p///Ge98cYbsttrs4pFixbp//2//6e///3vqqmpUW5urqZNm6Zf//rXkqSKigoNGTJEDzzwgEaOHHnKYysrq+QXDKKW+z+k1DmiGXUOM6DOYQbUOcygNgAI/gr9sPYA2L17t/bt26crrrjC63hhYaEmTpyo7du3Kycnx/PwL0m5ubnas2ePDh06pF27dqmyslK5ubme88nJyerdu7e2bdsWsvsAAAAAAKC9C+sSgC+//FKSdOzYMY0bN07FxcU6/fTTddNNN2n48OEqKSlRz549vV7TuXNnSdL+/ftVUlIiSeratWujaw4cONCmsYUifQHCxV3f1DmiGXUOM6DOYQbUOcwgBMv/JYU5ADh69KgkacaMGbr55pt1xx136B//+IcmTZqkJ598UlVVVY3W8cfGxkqSqqurdfz4cUnyeU15eXmbxpacHN+m1wORgDqHGVDnMAPqHGZAnQNtF9YAoEOHDpJq1/zn5eVJknr16qXi4mI9+eSTiouLU01NjddrqqurJUkJCQmKi4uTJNXU1Hi+dl8TH9+2XxAVFcfldLLGCNHJZrMqOTmeOkdUo85hBtQ5zIA6hxl06hQvqzX4s1zCGgBkZmZKUqNp/meddZb++c9/qlu3biotLfU65/6+S5cucjgcnmPdu3f3uiY7O7tNY3M6XTQZQdSjzmEG1DnMgDqHGVDniGahas0f1oU0vXv3VmJioj744AOv459++qm6d++unJwc7dixQ06n03Nuy5Yt6tGjh9LT05Wdna2kpCRt3brVc76iokLFxcUaPHhwyO4DAAAAAID2LqwzAOLi4jR+/HgtX75cXbp0Ub9+/fTKK6/o7bff1lNPPaWzzjpLK1eu1MyZMzV+/Hh9+OGHWr16tebMmSOpdu1/QUGBFi5cqLS0NHXr1k0LFixQZmamRowYEc5bAwAAAACgXQlrACBJkyZNUnx8vBYvXqyDBw8qKytLS5cu1QUXXCBJWrlypebNm6e8vDxlZGRo+vTpnn4BkjR16lQ5HA7NmjVLVVVVysnJUWFhYaPGgAAAAAAAmJnFMEK12iCylJVVssYIUctutyo1NZE6R1SjzmEG1DnMgDqHGaSlJYZkq0s20wQAAAAAwAQIAAAAAAAAMAECAAAAAAAATIAAAAAAAAAAEyAAAAAAAADABAgAAAAAAAAwAQIAAAAAAABMgAAAAAAAAAATIAAAAAAAAMAECAAAAAAAADABAgAAAAAAAEyAAAAAAAAAABMgAAAAAAAAwAQIAAAAAAAAMAECAAAAAAAATIAAAAAAAAAAEyAAAAAAAADABAgAAAAAAAAwAQIAAAAAAABMgAAAAAAAAAATIAAAAAAAAMAECAAAAAAAADABAgAAAAAAAEyAAAAAAAAAABMgAAAAAAAAwAQIAAAAAAAAMAECAAAAAAAATIAAAAAAAAAAEyAAAAAAAADABAgAAAAAAAAwAQIAAAAAAABMgAAAAAAAAAATIAAAAAAAAMAECAAAAAAAADABAgAAAAAAAEyAAAAAAAAAABMIewCwb98+nXPOOY3+eeGFFyRJO3fuVEFBgQYMGKBhw4apsLDQ6/Uul0tLlizRkCFD1L9/f40dO1Z79+4Nx60AAAAAANBu2cM9gE8++USxsbF67bXXZLFYPMc7duyosrIyjRkzRpdeeqnmzJmj999/X3PmzFFKSory8/MlSStWrFBRUZHmz5+vLl26aMGCBZowYYI2bNigmJiYcN0WAAAAAADtStgDgE8//VQ9evRQ586dG51bvXq1YmJidN9998lutysrK0t79+7VE088ofz8fNXU1GjVqlWaNm2ahg4dKklavHixhgwZok2bNmnkyJGhvh0AAAAAANqlsC8B+OSTT3TWWWf5PLd9+3bl5OTIbq/LKXJzc7Vnzx4dOnRIu3btUmVlpXJzcz3nk5OT1bt3b23bti3oYwcAAAAAIFK0ixkAGRkZ+s1vfqMvv/xSZ5xxhiZNmqQhQ4aopKREPXv29LrePVNg//79KikpkSR17dq10TUHDhxo07hstrBnI0DQuOubOkc0o85hBtQ5zIA6hxnUWw0fVGENAGpqavTll18qPj5e06dPV0JCgl566SVNmDBBTz75pKqqqhqt44+NjZUkVVdX6/jx45Lk85ry8vI2jS05Ob5NrwciAXUOM6DOYQbUOcyAOgfaLqwBQExMjLZt2ya73e55iD/33HP1xRdfqLCwUHFxcaqpqfF6TXV1tSQpISFBcXFxkmqDBPfX7mvi49v2C6Ki4ricTleb3gNor2w2q5KT46lzRDXqHGZAncMMqHOYQadO8bJagz/LJexLABISEhod69mzp/79738rMzNTpaWlXufc33fp0kUOh8NzrHv37l7XZGdnt2lcTqdLDge/YBDdqHOYAXUOM6DOYQbUOaKZYYTm54R1Ic2uXbs0cOBAbd++3ev4Rx99pLPOOks5OTnasWOHnE6n59yWLVvUo0cPpaenKzs7W0lJSdq6davnfEVFhYqLizV48OCQ3QcAAAAAAO1dWAOAnj176uyzz9acOXO0fft2ffHFF5o/f77ef/993XjjjcrPz9fRo0c1c+ZMff7551q3bp1Wr16tiRMnSqpdQlBQUKCFCxfq9ddf165du3TbbbcpMzNTI0aMCOetAQAAAADQrlgMI1STDXw7fPiwFi5cqM2bN6uiokK9e/fWHXfc4fkE/8MPP9S8efNUXFysjIwMjR07VgUFBZ7XO51OLVq0SOvWrVNVVZVycnJ077336vTTT2/TuMrKKplihKhlt1uVmppInSOqUecwA+ocZkCdwwzS0hJDstNF2AOA9opfMIhm/IcUZkCdwwyoc5gBdQ4zCFUAwGaaAAAAAACYAAEAAAAAAAAmQAAAAAAAAIAJEAAAAAAAAGACBAAAAAAAAJgAAQAAAAAAACZAAAAAAAAAgAkQAAAAAAAAYAIEAAAAAAAAmAABAAAAAAD4YBiGjlc7wj0MIGAIAAAAAADAh7X/2q2pj7ylPQcqwj0UICAIAAAAAADAhy9LKuR0Gfqm9Gi4hwIEBAEAAAAAAPjgdBq1f7qMMI8ECAwCAAAAAADwweFy1f7pdIV5JEBgEAAAAAAAgA/MAEC0IQAAAAAAAB/cD/4EAIgWBAAAAAAA4IMnAGAJAKIEAQAAAAAA+OB+8GcGAKIFAQAAAAAA+OA42QPA/ScQ6QgAAAAAAMAHp8vl9ScQ6QgAAAAAAMCHuh4AzABAdCAAAAA
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"n_season = len(result_season)\n",
|
||
|
"frequencies_season = np.fft.fftfreq(n_season)\n",
|
||
|
"\n",
|
||
|
"fourier_transform_season = np.fft.fft(result_season)\n",
|
||
|
"\n",
|
||
|
"plt.figure(figsize=(12, 4))\n",
|
||
|
"plt.plot(frequencies_season, np.abs(fourier_transform_season))\n",
|
||
|
"plt.xlabel('Frequency')\n",
|
||
|
"plt.ylabel('Amplitude')\n",
|
||
|
"plt.xlim(0, 0.1)\n",
|
||
|
"plt.show()"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false,
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.968626300Z",
|
||
|
"start_time": "2023-05-23T15:03:34.861214700Z"
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 28,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "0.3333333333333333"
|
||
|
},
|
||
|
"execution_count": 28,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"threshold = 0\n",
|
||
|
"\n",
|
||
|
"max_index_season = np.argmax(np.abs(fourier_transform_season[threshold:])) + threshold\n",
|
||
|
"\n",
|
||
|
"frequencies_season[max_index_season]"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false,
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:34.985197900Z",
|
||
|
"start_time": "2023-05-23T15:03:34.970624800Z"
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"source": [
|
||
|
"It returns 0.333, but its clearly wrong looking at the graph, so, as a feature, I will use the seasonality of 0.083 which is 12.1 months."
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"\n",
|
||
|
"# Model Training\n",
|
||
|
"\n",
|
||
|
"## Test and Train Split\n",
|
||
|
"\n",
|
||
|
"Data before 1920 as train."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 29,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:35.063817100Z",
|
||
|
"start_time": "2023-05-23T15:03:34.985197900Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Sunspots\nMonth \n1920-01-01 51.1\n1920-02-01 53.9\n1920-03-01 70.2\n1920-04-01 14.8\n1920-05-01 33.3",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Sunspots</th>\n </tr>\n <tr>\n <th>Month</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1920-01-01</th>\n <td>51.1</td>\n </tr>\n <tr>\n <th>1920-02-01</th>\n <td>53.9</td>\n </tr>\n <tr>\n <th>1920-03-01</th>\n <td>70.2</td>\n </tr>\n <tr>\n <th>1920-04-01</th>\n <td>14.8</td>\n </tr>\n <tr>\n <th>1920-05-01</th>\n <td>33.3</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 29,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Split in the furrier transform section\n",
|
||
|
"df_train = df_indexed['1749-01-01':'1919-12-01']\n",
|
||
|
"df_test = df_indexed['1920-01-01':'1983-12-01']\n",
|
||
|
"df_test.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Baseline Model\n",
|
||
|
"\n",
|
||
|
"As a baseline model, I will use the mean of the train data as the prediction for the test data.\n",
|
||
|
"\n",
|
||
|
"### Mean of the Train Data"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 30,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:35.063817100Z",
|
||
|
"start_time": "2023-05-23T15:03:35.001104100Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "array([45.48674464, 45.48674464, 45.48674464, 45.48674464, 45.48674464,\n 45.48674464, 45.48674464, 45.48674464, 45.48674464, 45.48674464])"
|
||
|
},
|
||
|
"execution_count": 30,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Create a baseline model\n",
|
||
|
"baseline_model = np.full(len(df_test), df_train['Sunspots'].mean())\n",
|
||
|
"baseline_model[0:10]"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### Evaluation Metrics\n",
|
||
|
"\n",
|
||
|
"I will use the following metrics to evaluate the model:\n",
|
||
|
"\n",
|
||
|
"- RMSE (Root Mean Squared Error): It is the square root of the average of squared differences between prediction and actual observation. It measures the standard deviation of residuals.\n",
|
||
|
"- MAE (Mean Absolute Error): It is the average of the absolute differences between prediction and actual observation. It measures the average magnitude of errors in a set of predictions, without considering their direction.\n",
|
||
|
"- R2 (R-Squared): It is the proportion of the variance in the dependent variable that is predictable from the independent variable(s). It measures how close the data are to the fitted regression line. Nearest to 1 is better.\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 31,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:35.063817100Z",
|
||
|
"start_time": "2023-05-23T15:03:35.017700Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Baseline RMSE: 56.73590776250707\n",
|
||
|
"Baseline MAE: 43.43141345841456\n",
|
||
|
"Baseline R2: -0.16264654387789323\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Calculate the RMSE (Root Mean Squared Error)\n",
|
||
|
"baseline_rmse = np.sqrt(mean_squared_error(df_test['Sunspots'], baseline_model))\n",
|
||
|
"print('Baseline RMSE:', baseline_rmse)\n",
|
||
|
"# Calculate the MAE (Mean Absolute Error)\n",
|
||
|
"baseline_mae = mean_absolute_error(df_test['Sunspots'], baseline_model)\n",
|
||
|
"print('Baseline MAE:', baseline_mae)\n",
|
||
|
"# Calculate the R2 score\n",
|
||
|
"baseline_r2 = r2_score(df_test['Sunspots'], baseline_model)\n",
|
||
|
"print('Baseline R2:', baseline_r2)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 32,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:35.313234800Z",
|
||
|
"start_time": "2023-05-23T15:03:35.033217400Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "Text(0.5, 0.8, 'R^2: -0.16')"
|
||
|
},
|
||
|
"execution_count": 32,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# Plot the baseline model\n",
|
||
|
"plt.figure(figsize=(12, 4))\n",
|
||
|
"plt.plot(df_train.index, df_train['Sunspots'], label='Train')\n",
|
||
|
"plt.plot(df_test.index, df_test['Sunspots'], label='Test')\n",
|
||
|
"plt.plot(df_test.index, baseline_model, label='Baseline model')\n",
|
||
|
"plt.legend(loc='upper left')\n",
|
||
|
"\n",
|
||
|
"mae = mean_absolute_error(df_test, baseline_model)\n",
|
||
|
"mse = mean_squared_error(df_test, baseline_model)\n",
|
||
|
"r2 = r2_score(df_test, baseline_model)\n",
|
||
|
"\n",
|
||
|
"plt.title(f\"Model: Baseline\", fontsize=16, fontweight='bold')\n",
|
||
|
"\n",
|
||
|
"plt.text(0.5, 0.9, f\"MAE: {mae:.2f}\", transform=plt.gca().transAxes)\n",
|
||
|
"plt.text(0.5, 0.85, f\"MSE: {mse:.2f}\", transform=plt.gca().transAxes)\n",
|
||
|
"plt.text(0.5, 0.8, f\"R^2: {r2:.2f}\", transform=plt.gca().transAxes)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"This clearly doesn't look good. Let's see if we can do better.\n",
|
||
|
"\n",
|
||
|
"## Train and Compare Models\n",
|
||
|
"\n",
|
||
|
"I will create the features to train the model, the month and the year.\n",
|
||
|
"\n",
|
||
|
"### Features Engineering\n",
|
||
|
"\n",
|
||
|
"Since the date itself is a bad feature, I need to create them, to train the model:\n",
|
||
|
"\n",
|
||
|
"- The month: a number between 1 and 12 that indicates the month of the year.\n",
|
||
|
"- The partial: a number between 0 and 133 that indicate the month of the cycle. The cycle is 134.29 months long, so the partial is the number of months since the last cycle.\n",
|
||
|
"- The trend: the trend is the long-term increase or decrease in the data. It is the overall pattern of the data. It is the trend that the model will try to predict.\n",
|
||
|
"- The noise: the noise is the difference between the actual observation and the prediction of the previous model. It is the noise around the trend and seasonal component.\n",
|
||
|
"- The seasonality: the seasonality is the periodic component of the data. It is the repeating pattern within each year."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 33,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:36.668297900Z",
|
||
|
"start_time": "2023-05-23T15:03:35.314234200Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 4 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"plt_seasonal_dec = seasonal_decompose(df_indexed['Sunspots'], model='additive', period=134, extrapolate_trend='freq', two_sided=True).plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 34,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:45:05.054492300Z",
|
||
|
"start_time": "2023-05-23T15:45:04.975759600Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Partial-trend-month Partial-seasonal-month rolling-diff \\\nMonth \n1749-01-01 1 1 0.0 \n1749-02-01 2 2 4.6 \n1749-03-01 3 3 7.4 \n1749-04-01 4 4 -14.3 \n1749-05-01 5 5 29.3 \n\n rolling-der Trend Seasonality Noise \nMonth \n1749-01-01 0.333333 29.467287 25.208104 3.324609 \n1749-02-01 1.533333 29.579665 21.201296 11.819039 \n1749-03-01 2.466667 29.692042 25.258995 15.048963 \n1749-04-01 -4.766667 29.804420 20.716833 5.178747 \n1749-05-01 9.766667 29.916798 20.874531 34.208671 ",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Partial-trend-month</th>\n <th>Partial-seasonal-month</th>\n <th>rolling-diff</th>\n <th>rolling-der</th>\n <th>Trend</th>\n <th>Seasonality</th>\n <th>Noise</th>\n </tr>\n <tr>\n <th>Month</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>1749-01-01</th>\n <td>1</td>\n <td>1</td>\n <td>0.0</td>\n <td>0.333333</td>\n <td>29.467287</td>\n <td>25.208104</td>\n <td>3.324609</td>\n </tr>\n <tr>\n <th>1749-02-01</th>\n <td>2</td>\n <td>2</td>\n <td>4.6</td>\n <td>1.533333</td>\n <td>29.579665</td>\n <td>21.201296</td>\n <td>11.819039</td>\n </tr>\n <tr>\n <th>1749-03-01</th>\n <td>3</td>\n <td>3</td>\n <td>7.4</td>\n <td>2.466667</td>\n <td>29.692042</td>\n <td>25.258995</td>\n <td>15.048963</td>\n </tr>\n <tr>\n <th>1749-04-01</th>\n <td>4</td>\n <td>4</td>\n <td>-14.3</td>\n <td>-4.766667</td>\n <td>29.804420</td>\n <td>20.716833</td>\n <td>5.178747</td>\n </tr>\n <tr>\n <th>1749-05-01</th>\n <td>5</td>\n <td>5</td>\n <td>29.3</td>\n <td>9.766667</td>\n <td>29.916798</td>\n <td>20.874531</td>\n <td>34.208671</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 34,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df_train = df_indexed['1749-01-01':'1919-12-01']\n",
|
||
|
"df_test = df_indexed['1920-01-01':'1983-12-01']\n",
|
||
|
"\n",
|
||
|
"def parse_df(df_: pd.DataFrame, trend_period: int = 137, seasonal_period: int = 12, window_size: int = 3) -> pd.DataFrame:\n",
|
||
|
" df_ret = pd.DataFrame(columns=[#'Month-total', # The month number since the beginning of the data (preserve total time information)\n",
|
||
|
" # 'Partial-trend-month', # The month number since the beginning of the cycle\n",
|
||
|
" # 'Partial-seasonal-month', # The month number since the beginning of the seasonality\n",
|
||
|
" # 'rolling-avg-3', # The rolling average, gives information about the sunspots numbers\n",
|
||
|
" # 'rolling_change', # The rolling difference, gives information about the direction\n",
|
||
|
" # 'Trend',\n",
|
||
|
" # 'Noise',\n",
|
||
|
" # 'Seasonality'\n",
|
||
|
" ])\n",
|
||
|
"\n",
|
||
|
" # df_ret['Month-total'] = df_.index.month + (df_.index.year - 1749) * 12\n",
|
||
|
" df_ret['Partial-trend-month'] = ((df_.index.year - 1749) * 12 + df_.index.month) % trend_period\n",
|
||
|
" df_ret['Partial-seasonal-month'] = ((df_.index.year - 1749) * 12 + df_.index.month) % seasonal_period\n",
|
||
|
"\n",
|
||
|
" rolling_avg = df_['Sunspots'].rolling(window=3, min_periods=1).mean().to_frame()['Sunspots']\n",
|
||
|
"\n",
|
||
|
" rolling_diff = df_['Sunspots'].diff(periods=1).to_frame()['Sunspots']\n",
|
||
|
" rolling_diff.fillna(0, inplace=True)\n",
|
||
|
"\n",
|
||
|
" df_ret.index = df_.index\n",
|
||
|
"\n",
|
||
|
" # to add the information about the speed of the change\n",
|
||
|
" # I wanted to get the rolling derivative or the gradient, but there is no function for that, however,\n",
|
||
|
" # I found out the percentage change function (only version 2.0.1+)\n",
|
||
|
" # which gives the percentage change between the current and a prior element(s). (it doesn't work)\n",
|
||
|
" # rolling_change = df_['Sunspots'].pcnt_change(window_size)\n",
|
||
|
"\n",
|
||
|
" # I will calculate simply by doing: Dy/Dx where x is the time and y is the sunspots\n",
|
||
|
" # print i will use 3 month as the time step\n",
|
||
|
" # rolling sum of the last 3 months\n",
|
||
|
" rolling_der = df_['Sunspots'].diff(periods=1).to_frame()['Sunspots']\n",
|
||
|
" # fill the first 2 values with the first value 1\n",
|
||
|
" rolling_der.fillna(1, inplace=True)\n",
|
||
|
" # calculate the derivative\n",
|
||
|
" rolling_der = rolling_der/3\n",
|
||
|
"\n",
|
||
|
" seasonal_decompose_result = seasonal_decompose(df_['Sunspots'], model='additive', period=134, extrapolate_trend='freq', two_sided=True)\n",
|
||
|
"\n",
|
||
|
" for idx, row in df_ret.iterrows():\n",
|
||
|
" # df_ret.at[idx, 'rolling-avg-3'] = rolling_avg.at[idx]\n",
|
||
|
" df_ret.at[idx, 'rolling-diff'] = rolling_diff.at[idx]\n",
|
||
|
" df_ret.loc[idx, 'rolling-der'] = rolling_der.at[idx]\n",
|
||
|
" df_ret.loc[idx, 'Trend'] = seasonal_decompose_result.trend[idx]\n",
|
||
|
" df_ret.loc[idx, 'Seasonality'] = seasonal_decompose_result.seasonal[idx]\n",
|
||
|
" df_ret.loc[idx, 'Noise'] = seasonal_decompose_result.resid[idx]\n",
|
||
|
"\n",
|
||
|
" return df_ret\n",
|
||
|
"\n",
|
||
|
"X_train = parse_df(df_train)\n",
|
||
|
"X_test = parse_df(df_test)\n",
|
||
|
"\n",
|
||
|
"# as y, use the next month sunspots\n",
|
||
|
"y_train = df_train['Sunspots'].shift(-1).dropna()\n",
|
||
|
"y_test = df_test['Sunspots'].shift(-1).dropna()\n",
|
||
|
"\n",
|
||
|
" # count null\n",
|
||
|
"X_train.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### Compare Models\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 35,
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"def predict_next(months: int, df_X_train: pd.DataFrame(), df_y_train: pd.DataFrame() , model_: sklearn.linear_model) -> pd.DataFrame():\n",
|
||
|
" df_y_train = pd.DataFrame(df_y_train, columns=['Sunspots'])\n",
|
||
|
"\n",
|
||
|
" # I will use the last row of the train set as the first prediction input\n",
|
||
|
" for i in range(months):\n",
|
||
|
" # this value correspond to the next month\n",
|
||
|
" sunspot_pred = model_.predict( df_X_train.tail(1) )\n",
|
||
|
"\n",
|
||
|
" # get the last date of the df_train and add one month\n",
|
||
|
" last_date = df_train.tail(1).index + pd.DateOffset(months=1)\n",
|
||
|
"\n",
|
||
|
" # create a df, date as index and prediction as value to the prediction set\n",
|
||
|
" row_pred = pd.DataFrame(data=[sunspot_pred], columns=df_y_train.columns , index=last_date)\n",
|
||
|
"\n",
|
||
|
" # add the prediction row at the at to the prediction set in the only column\n",
|
||
|
" df_y_train = pd.concat([df_y_train, row_pred])\n",
|
||
|
"\n",
|
||
|
" # also, prepend the very first sunspot that has been removed with the shift\n",
|
||
|
" first_sunspot = df_train['Sunspots'].head(1)\n",
|
||
|
" first_sunspot = pd.DataFrame(first_sunspot, columns=['Sunspots'])\n",
|
||
|
"\n",
|
||
|
" df_y_train = pd.concat([first_sunspot, df_y_train])\n",
|
||
|
"\n",
|
||
|
" # create the new dataframe for the prediction set based on the new prediction\n",
|
||
|
" df_X_train = parse_df(df_y_train)\n",
|
||
|
"\n",
|
||
|
" # then shift y again\n",
|
||
|
" df_y_train = df_y_train.shift(-1).dropna()\n",
|
||
|
"\n",
|
||
|
" return df_y_train[-months:]"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 36,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"end_time": "2023-05-23T15:03:36.960294200Z",
|
||
|
"start_time": "2023-05-23T15:03:36.887037900Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"C:\\ProgramData\\anaconda3\\envs\\MachineLearning\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:686: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
|
||
|
" warnings.warn(\n",
|
||
|
"C:\\ProgramData\\anaconda3\\envs\\MachineLearning\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:686: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
|
||
|
" warnings.warn(\n",
|
||
|
"C:\\ProgramData\\anaconda3\\envs\\MachineLearning\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:686: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
|
||
|
" warnings.warn(\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAF7CAYAAAAzAcOWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACXhklEQVR4nOzdd3hT1f8H8PfNXh3pLl2UQlv2LC1LkSkKKuJGBATce+BARgX068+9UUBARRAFRWWKbJllyt6lLd073Unu74+0oaEp0FJI0r5fz8MDubm5OelJad8553yOIIqiCCIiIiIiIiKqE4mjG0BERERERETkihioiYiIiIiIiOqBgZqIiIiIiIioHhioiYiIiIiIiOqBgZqIiIiIiIioHhioiYiIiIiIiOqBgZqIiIiIiIioHhioiYiIiIiIiOqBgZqIiIiIiIioHmSObgAREdGNsGzZMrzxxhs2x0aNGoW33nrL5pjJZEL37t1hMBhsjh8/fvy6tq9fv35ISUkBAHz//feIjY2t13V27tyJRx55BAAQFBSE9evXN0j7Dh48iJ9//hm7d+9GZmYmKioqoNfr0bp1a9x+++0YNmwYJBLL5/QZGRm4+eabYTabAQAzZszAvffea/e6BoMBPXr0QHl5OQDgvffew1133YVRo0Zh165ddh8jkUigVqvh5+eHzp07Y8KECWjRokWDvE4iIqK64Ag1ERE1Wdu3b69x7L///qsRppu6b775Bvfddx9+/fVXJCYmori4GBUVFcjIyMCmTZswceJEjB07FiUlJQAAPz8/mw8EVq1aVeu1169fbw3TKpUKAwcOvGJ7zGYzioqKcPbsWSxbtgzDhw/H/v37r+1FEhER1QNHqImIqMk6deoUMjIy4OfnZz1mL2Q3ZQkJCfjoo4+st1u3bo0OHTpAJpNh//79OHz4MABgx44d+OijjzBp0iQAwLBhw6xfyx07diAnJwdeXl41rr9mzRrrv/v37w+tVlvjnC5duqBr167W2yaTCVlZWVi7di1KS0tRWlqKKVOm4I8//miYF01ERHSVGKiJiKjJUavV1tHUbdu24a677rLeVxUCNRoNiouLHdE8p7J06VLrvx988EFMmzbN5v4pU6bg559/BmCZVv/6669DKpVi8ODBiI+PR1lZGUwmE9asWYMHH3zQ5rHFxcXYunWr9fawYcPstqFnz5549tlnaxy/4447MH78eACWKflJSUkICQmp1+skIiKqD075JiKiJqdLly7Wf1cfkS4rK8O+fftqnFObLVu24Omnn8ZNN92Edu3aoU+fPnjppZdw8ODBWh/z22+/4e6770bHjh3Rq1cvTJ8+HYWFhZd9noKCAnz44YcYPHgw2rdvj9jYWIwfPx6bN2++Yhur+/zzzxEVFYWoqCi8/vrrV/WYjIwM6791Ol2N+8ePH4/evXujd+/e6NSpE4qKiqzn9u3b13reypUrazx248aNKC0tBQB4enqid+/edXk5iImJsbmdlZVVp8cTERFdK45QExFRk+Pn54ewsDAkJibaBOq9e/da1/N2797dZvS0OlEUER8fj0WLFtkcz8jIwIoVK7By5Uq8/PLLmDBhgs39M2fOxPfff2+9XVpaih9//BEJCQnWEfNLpaWl4ZFHHkFiYqL1WHl5ObZs2YItW7bgqaeewvPPP1+3L0AdtGjRwvp1mDt3Li5cuIA77rgD3bt3h0ajQWhoKObOnWv3sXfccYd1SndCQkKN6fWrV6+2/nvIkCGQy+V1atulBdeCg4Pr9HgiIqJrxUBNRERNUvfu3ZGYmIj09HScPn0aERERNuG6e/futT52/vz5NmG6W7duiIyMxIEDB3D48GGIoogPPvgAQUFBuO222wBYppZXD9Ph4eGIi4vD6dOna61mDQCvvvqqNUz7+Pigf//+yM/Px99//w2TyYSvvvoKXbp0QZ8+fa74mrt27WoN+W3btr3i+YClEvovv/yCkpISmM1mrFixAitWrIBcLke7du3Qu3dvDBkyBBERETUee9NNN8HDwwP5+fkwm81Ys2YNRo0aBcDyYcKWLVus59Y23RuwfO3KysoAWD7MKCsrQ2pqqk2g7tevH3x9fa/qNRERETUUBmoiImqSunfvjl9++QWAZdp39UCt0WjQvn17u48rLS3Fl19+ab394osv4oknngBgqT4dHx+PxYsXAwA++OAD3HrrrZBIJNZ1xgDQuXNnLFiwAEql0nre7NmzazzXwYMHrWFbr9fjjz/+gLe3NwBL5ewXXngBgGXk+GoCdc+ePdGzZ88rnlddaGgovvrqK7z44ovIy8uzHq+oqMC+ffuwb98+fP7557j99tsxdepUeHh4WM9RKBQYPHgwlixZAgBYsWKFNVBv2rTJukY9KCjoslPs9+7di71799Z6f+fOnTFz5sw6vS4iIqKGwDXURETUJFXf1mnbtm0oLCy0Vqzu0qULZDL7nzlv3brVuuY5KCjIZlq3RCLBq6++CrVaDQBISUnB0aNHAQAHDhywnjd+/HhrmAaACRMmQBCEGs9VfcS8f//+1jANWKZIazQaAJbp1FVT1a+Hnj174u+//8Zrr72GDh06WPebrm7FihV46qmnrHtPV6k+8rx//36kpqYCsK3uPWzYMLuv/0oGDBiAOXPmYNGiRXYriBMREV1vDNRERNQk+fv7IywsDACwa9cubN++HSaTCYBt2L5U9bXMUVFRkEqlNvfrdDqEhoZab58/fx6AbcGs5s2b2zzGw8PDJixXqQqfAPDrr79aC4pV/aka4a2oqEBSUtJlX++1cnd3x6OPPopffvkFO3bswJdffomHHnrIZkQ6ISGhxrrmmJgYBAYGArBM1161ahXKysqwceNG6zlDhw697HM/88wzOHToEFavXo0BAwZYj2/btg1ms7leYZyIiKghMFATEVGTVVUlurCwEHPmzLEev9z66dpGrqsTRdH676qwVz30GY3GGo+xd6z6aK9Go4GPj0+tf2oranYt8vPzsXbtWixcuBDffPON9biHhwcGDBiAqVOnYu3atTZbVV06NVsQBNx+++3W2ytXrsSWLVus1cBbt26NVq1aXbEtcrkc4eHh+OSTT9CxY0cAlm23qsI2ERGRI3ANNRERNVndu3fHr7/+CuDilGyNRoN27drV+pigoCDrv48fPw6TyWQzSm0wGGxGi6tGo/39/a3Hz549i+joaOs52dnZNuuTq1SviD1s2DC8/fbbNvebzWa7068bSn5+vs3+z3379kVUVJTNOZ6enoiMjLS+NntTz4cNG2b9wOK///7Dd999Z3NfXcjlcrz77ru46667UF5ejvLycrz22mv47bffoFAo6nQtIiKia8URaiIiarLsTe2+3PppAOjRo4fNGunq4VAURXz44YfW0eKwsDBrAK2+Z/L333+PiooK6+0vvvjC7nNVHylfs2YN0tLSrLf/+ecfdO7cGXfffTfi4+Mv+zrrKzQ0FC1atLDenjp1KgwGg805hw8ftlnrfWngBoDo6GhERkZab+/ZsweAZc159dHrqxUREYGnnnrKevvUqVOYN29ena9DRER0rThCTURETVZAQABCQ0Ot65yBy6+fBgCtVovRo0dj1qxZACwVujdv3oxWrVph//791sJmADBx4kTrVO+HHnoIv//+O8xmM/bu3Yvhw4cjLi4OR44csQbMS8XExKBt27Y4fPgw8vLyMGzYMAwcOBCApcp3aWkpDh8+jF69el3V6922bRu2bdsGwLJt1pAhQ674mGeeeQYvvfQSAGDfvn0YMGAAevfuDb1ej6SkJGzevNm69tzX17fW9dDDhg3Dhx9+WOP1BQQEXFXbLzV+/HisXLkSJ06cAADMmjULd955Z72vR0REVB8coSYioibt0vXSl1s/XeW5557DHXfcYb29a9cuLFy40BqmJRIJ3nzzTZsCWu3bt8eLL75ovX3y5En88MMP2LNnD8LDw9G7d+8azyMIAj766CPr1O+CggIsXboUS5cutRYki4uLw9NPP31Vr3XPnj2YPXs2Zs+ejU2bNl3VY26//XY888wz1g8GcnNz8eeff+L777/Hhg0brGF
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAF7CAYAAAAzAcOWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACTUklEQVR4nOzdd3hT1R8G8DejSZPOdEMXhVL2KNBSZMhGFJCKKLKhiODACaLIFifiQkWg7KUIP0CGyJK9yt5QRvfe6c74/VEaGhpKW1qStO/neXww997c+01OCn1zzj1HoNVqtSAiIiIiIiKiChEauwAiIiIiIiIic8RATURERERERFQJDNRERERERERElcBATURERERERFQJDNRERERERERElcBATURERERERFQJDNRERERERERElcBATURERERERFQJDNRERERERERElSA2dgFERGQ6Nm/ejE8++URv24gRI/DZZ5/pbVOr1QgMDIRSqdTbfuPGjWqtr3v37oiJiQEArFq1Cu3bt6/UeU6ePImRI0cCANzd3bF///4nquvnn3/GwoUL9bZ98sknGD16tN62lJQUdOzYEVqtVrft4euPGDECp06dAgC8/fbbeOeddx57/ZKvpyShUAixWAwbGxt4e3vjlVdewcCBAyEQCMqsvZhAIIBUKoWjoyP8/PwwfPhwdOrU6bH1EBER1RbsoSYiojIdP3681LZLly6VCtOk79ixY6W2nThxQi9MVzeNRoOCggKkpKTg7NmzmDp1Kj799NNyP1+r1SIvLw8xMTE4cOAAQkJCsHLlymqsmIiIyLywh5qIiMoUHh6OxMREuLi46LYZCtmk7/Tp0ygsLISFhYVu29N6315//XUARSMJMjIycPjwYSQmJgIoGoXQp08fdO3atdTz6tSpg379+ukeazQaZGdnY//+/brnz58/H3379tX7PBAREdVWDNRERGSQTCZDbm4ugKLe1oEDB+r2FQdDuVyOnJwcY5Rnsorft5ycHFy4cAHt2rXT7Xta79tHH32k9zgrKwuvvvoqbt++DQDYtGmTwUDt6elZ6rkAMGnSJPTu3RtKpRIFBQU4dOgQXn755WqpnYiIyJxwyDcRERnUpk0b3f+X7FnNz8/HuXPnSh3zKIcPH8Zbb72FLl26oHnz5ujcuTM++OADXLx48ZHP+d///oeXXnoJrVq1QseOHTF3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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAF7CAYAAAAzAcOWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACiBklEQVR4nOzdd1zV1R/H8dcd7L2RraC4FQXEvSsry5FltrNle5jVr2ll24Y2NLWy0hxZmqllbs2JiltUBJQlW/a69/7+uHLlCigQernweT4ePrr3O+793Mvpwvue8z1HodPpdAghhBBCCCGEEKJelKYuQAghhBBCCCGEMEcSqIUQQgghhBBCiAaQQC2EEEIIIYQQQjSABGohhBBCCCGEEKIBJFALIYQQQgghhBANIIFaCCGEEEIIIYRoAAnUQgghhBBCCCFEA0igFkIIIYQQQgghGkACtRBCCCGEEEII0QBqUxcghBCi8fz222+88sorRtvuueceXnvtNaNtGo2GyMhICgoKjLbHxsZe1fqGDBlCcnIyAD/++CO9evVq0OPs2rWLe++9FwBfX182bNjwn+qq+r7V5/Ea6/U0JTNnzuTLL7+scZ9CocDKygo3NzfatWvH3XffTb9+/a5xheatsduuEEII05IeaiGEaOZ27NhRbduhQ4eqhWkhrkSn01FSUkJycjIbN25k4sSJzJ8/39RlCSGEECYjPdRCCNHMnTp1ivT0dDw9PQ3bagrZov7Gjx9PXl4eAD4+PiaupvG1atWKm2++2XBfq9VSWFjIhg0bSE9PB+CTTz5hxIgRRu1L1M7Hx4eHH34YAEdHRxNXI4QQ4r+SQC2EEM2UjY0NxcXFAGzfvp1Ro0YZ9lUGaltbW4qKikxRXrPwyCOPmLqEq8rf35/JkydX2/70009z3XXXUVBQQFlZGVu2bOG2224zQYXmp7b3VAghhHmSId9CCNFM9ejRw3C7ao90aWkp+/fvr3ZMbbZu3coTTzzBgAED6Ny5M/379+f555/n4MGDtZ7z+++/M2bMGLp160bfvn155513yM/Pv+zz5OXlMX36dK6//nq6dOlCr169eOihh9iyZcsVa6xq5syZhIaGEhoayssvv1yvc+tryJAhhufatWuXYfvLL79s2L5lyxaOHz/OpEmTiIiIICwsjPvuu489e/bU+Jjx8fFMmTKFfv360blzZwYMGMCUKVOIi4u77PGDBw+mc+fOhnOee+65auf89ttvhro++eQTlixZwoABA+jatSs333xznb9ccXNzo02bNob7WVlZRvs1Gg2//PILY8eOpXv37vTo0YNx48axYMECKioqanzMo0eP8thjjxEeHk5YWBgPPvggBw8eZMWKFYaaZ86cWeN7vGHDBt5991169OhBWFiYUWCtb7uKi4vjpZdeYsiQIYb3c8iQIbz44oucOnWq2vEajYYFCxYwfvx4wsPD6dixI+Hh4dxxxx389NNPaDQao+N37dplqHvIkCHVHq+iooIlS5YwYcIEoqKi6NKlC9dffz3Tpk0jLS2t2vFV2/svv/xCcnIykydPJioqim7dunH77bezbt26Gl+rEEKI/056qIUQopny9PQkMDCQxMREo0C9b98+ysrKAIiMjGTbtm01nq/T6Zg6dSq//PKL0fb09HRWrVrF6tWreeGFFwzDVytNmzaNH3/80XC/pKSEn3/+mejoaEOP+aXS0tK49957SUxMNGwrKytj69atbN26lccff5xnnnmmfm9AE7F7925+/PFHSktLDdt27tzJ3r17+fnnn+nevbth+44dO3j88ceNgu25c+dYsWIFf/31FzNnzmTgwIGGffHx8UyYMIHs7Gyj5zx37hyrV69m48aNLF26lLZt21ara/PmzZw4ccJw38nJCVtb2zq9prNnzxqFSz8/P8PtiooKnnzySTZu3Gh0zsGDBzl48CDr169n1qxZWFpaGvZt2bKFJ554wtAuAf799192797NLbfccsV6Pv/8c6MJ9fz9/YH6t6vDhw9zzz33VPtiITk52XDd+I8//kjHjh0N+yZPnszq1auNjs/PzycmJoaYmBgOHz7Mhx9+eMXXAJCTk8Pjjz/Ovn37jLYnJCSQkJDA77//zsyZM+ndu3eN58fFxfH555+Tm5tr2HbgwAGeeOIJZsyYwfXXX1+nOoQQQtSdBGohhGjGIiMjSUxM5Ny5c8TFxREcHGwUriMjI2s994cffjAK0+Hh4bRr144DBw5w5MgRdDodn3zyCb6+vtx4442Afmh51TDdunVroqKiiIuLY/fu3bU+14svvmgIPe7u7gwdOpTz58/zzz//oNFo+Prrr+nRowf9+/e/4mvu2bOnIeR36tTpisdfbXPmzMHBwYFbbrmFgoIC1qxZA0B5eTk//fSTIVDn5OTw7LPPGsJcu3btiIiI4MSJE+zZs4fS0lImT57MmjVrcHd3B2D69OmGMB0aGkpUVBQFBQX8888/5OXlUVxczKJFi3j99der1XXixAns7e256aabSEtLq7G39OzZs3zyySeG++Xl5eTk5LBhwwZDnR4eHkbnfvPNN4YwbWFhwfXXX4+trS1///0358+f599//+XLL7/k+eefB6CgoIAXX3zREKadnZ0ZMmQIxcXFrFu3jmXLll3xPY6NjSUgIIABAwawb98+w3Xf9W1XX3zxheF1de7cme7du6PVatm0aRMpKSnk5+czbdo0FixYAOi/JKgM07a2tgwdOhQ3NzfOnDnDxo0b0el0LF++nFGjRtUagqt65ZVXDGFarVYzZMgQnJ2d2bp1K6mpqeTn5/PEE0+wfPlyAgICqp3/008/YWVlxS233IJarWblypWUl5cD8P3330ugFkKIq0ACtRBCNGORkZEsXboU0Pd+Vg3Utra2dOnSpcbzSkpK+Oqrrwz3n3vuOR577DFAPzHV1KlTWbRoEaCflOqGG25AqVSyePFiwzlhYWHMnz8fKysrw3Fz5syp9lwHDx40hG0XFxf++OMP3NzcAFizZg3PPvssAPPmzatToO7Tpw99+vS54nHXiq2tLb/99pshADk6Ohrep5MnTxqO+/XXXw09i7169eK7775Drdb/mp46dSoLFy4kLy+PJUuW8PjjjwPQpUsXlEol2dnZzJs3z/BeR0ZG8tJLLwH6UFybDz/8kGHDhtW6PzU1tcafWSUvLy++/PJLbGxsAH3vb9UvVObMmWMIko888gi33HILRUVFLFiwgEmTJmFjY8OaNWsMr9vOzo5ly5YZerx37NjB/fffX+vzV7KysmLhwoV4eHgYtjWkXZ05cwbQfxHw888/G17Xs88+y+TJk/H39yckJASNRoNKpTIcD3Dvvffy3HPPGe7/9NNP7N27l5CQEBwcHK74Gvbt22f4IkKlUjF//nzCw8MB/ZcO999/P4cOHaKwsJAvv/ySjz76qNpjKJVK5s+fT1hYGABBQUF8+umngHFbE0II0XjkGmohhGjGqq6LvH37dvLz8zly5Aigv366MrBdatu2bYZrnn19fY2GdSuVSl588UVD2EhOTubYsWOAfnhppYceesgQ8AAefvhhFApFteeq2mNe2cNXacSIEYZhyNHR0UZDgs3FkCFDjHoTBwwYYLhddWjxzp07DbfHjh1r9LMZM2aM4XbV9+vRRx9lxowZ/Pzzz1hZWZGRkcHatWtZv3694ZiSkpIa67Kzs6uxV7ouQkND+fDDD/n777/p2rWrYfuRI0cMs54HBAQY9cr6+/sbRkQUFBQYrsGvOrx51KhRRsPHe/fuXacvR6KioozCNDSsXVWOaCgvL+eGG27g7bffZvXq1ZSUlDBnzhzeeOMNJkyYgEqlAqBDhw6GNj1nzhwmTpzIvHnziImJYfz48Xz++ec8+eSTdO7c+YqvoXLkAsBNN91kCNMA9vb2vPDCC4b7GzZsQKvVVnuMbt26GcI0YHR5gEw+KIQQV4f0UAshRDPm5eVluI569+7d7NixwzBJUtWwfamq15yGhoYaAkQle3t7AgICDNetnjlzhk6dOpGZmWk4JigoyOgcJycn3NzcjI4BfS9opV9//ZVff/21xprKy8s5e/Y
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAF7CAYAAAAzAcOWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC/fUlEQVR4nOzdZ3RU1deA8Wdqem8kpJLQQi+BIFUREAQFUaxIFxA7ivraQEX9K6hgoyNWbFhooiiC9F5DDQmQDimkJ5OZeT8MuWRMKAmBSdm/tVwmt82ezCG5+55z9lGZzWYzQgghhBBCCCGEqBS1rQMQQgghhBBCCCFqI0mohRBCCCGEEEKIKpCEWgghhBBCCCGEqAJJqIUQQgghhBBCiCqQhFoIIYQQQgghhKgCSaiFEEIIIYQQQogqkIRaCCGEEEIIIYSoAkmohRBCCCGEEEKIKpCEWgghhBBCCCGEqAKtrQMQQoi6ZtmyZbz44otW24YPH87LL79stc1oNNKpUydyc3Otth89evS6xnfLLbeQmJgIwBdffEHnzp2rdJ1t27bx8MMPA9CwYUP+/vvva4rro48+4uOPPy63Xa1WY29vj6+vL23btuXBBx+kdevW1/RaVfXCCy/w888/A/DYY4/x+OOPV/la1fU5VFXZ93K1rnfbvFoV/RsrpVKp0Ov1uLu707hxY4YOHUr//v1RqVQ3OEohhBD1gfRQCyHEDbBly5Zy2w4cOFAumRblmUwm8vPziY+P55dffmHYsGHMmTPH1mGJGspsNlNUVERqaiobN27k6aef5u2337Z1WEIIIeoo6aEWQogb4MSJE6SlpeHr66tsqyjJFhb+/v4MHDgQs9lMSUkJGRkZbNq0ifT0dMxmMx988AH+/v7ceeedNzSunj174u3tDUCHDh2u6Vr33Xcf2dnZAAQEBFxzbJVV9r2U+vbbb5WHPD179qRJkyY3PK7KcnZ25v7771e+N5vNFBYW8u+//3Lq1CkAlixZwp133kmLFi1sFaYQQog6ShJqIYS4jhwcHCgoKABg8+bNDB48WNlXmlA7OjqSn59vi/BqrKCgIJ599lmrbfn5+TzxxBP8+++/ALzzzjvcdttt2NnZ3bC4+vfvT//+/avlWo888ki1XKeqKnovq1atUhLq2267jbvuussWoVWKm5tbubYCUFhYyO23305CQgIAa9eulYRaCCFEtZMh30IIcR21b99e+bpsj3RRURF79uwpd8yl/Pvvv0yaNIkePXrQsmVLunfvzjPPPMP+/fsvec7PP//MXXfdRZs2bejatStvvPEGOTk5l32d7OxsZs6cSb9+/WjVqhWdO3dm7NixbNiw4YoxlvXRRx/RtGlTmjZtygsvvFCpcy/F0dGRd955B51OB0BGRgZr1qwpd9zKlSt58MEHad++PW3btuWOO+5gzpw5yoON/8rJyWH27NkMGjSItm3b0qlTJ4YMGcLChQvLPeh44YUXlPf10UcfWe3bu3cvTzzxBN27d6dly5a0bt2avn378tprr5GcnFzudW+55RblWtu2bSu3f+/evTz77LPccssttGzZki5dujBx4kQ2btxY7tiEhATlWsOGDaOkpIT58+dz22230apVK2655RZmzpx5yZ/B1dq2bZvyOk8//TR//fUXffr0oWXLlvTp04czZ84ox1b2c0hNTWXatGncfPPNtGzZkq5du/L444+zb9++KsVqb29Pq1atlO/T09PLHVPZGE+fPs3kyZOJjo6mTZs23H///WzcuJGdO3dW2N7L/jv49ttv+eSTT+jcuTNt2rThoYceUo4rKipi3rx5DBo0iNatWxMVFcXw4cNZvnw5ZrO5XBwpKSlMnTqVfv360bp1a+V3wmOPPab8Xvmv5cuX8/DDD9O5c2ciIyNp164dgwcP5tNPP6WwsLDCc/Lz81m8eDF33303UVFRtG3blkGDBvHhhx+SlZVV7vjhw4cr73f//v1MnjyZNm3a0LFjR2bMmFHhawghRG0nPdRCCHEd+fr6EhISwqlTp6wS6t27d1NcXAxAp06dKkySwDJ8ddq0aXz77bdW29PS0li5ciWrVq1i8uTJjBs3zmr/9OnT+eKLL5TvCwsL+eqrr9i5c+clk4WUlBQefvhhZZgsQHFxMf/++y///vsvjz76KE8++WTlfgDVzNvbm/bt2ysJ6I4dO7jjjjuU/a+++irfffed1TlHjx7l6NGj/P7773z++ee4u7sr+5KSkhgxYgSnT59WthUUFHD+/HliYmJYs2YNn3/+OY6OjpeNa926dUyaNAmj0Wi1/dSpU5w6dYr169fzzTffXPXQ7jlz5jBr1ixMJpOyLSMjg7///pu///6bhx56iFdeeaXCc0tKSpg0aRL//POPsi0xMZF58+Zx/Pjxapt/fuTIEf78808MBoPyuoGBgUDlP4cjR44wevRoq6T33Llz/PHHH6xdu5bXX3+de+65p1LxZWRkWCXjpbGVqmyMhw4dYuTIkcowfbD8Ox47dizDhg27YjzffvutVVG30raQm5vLyJEjOXDggLKvqKiI7du3s337djZt2sTbb7+tFFVLTEzknnvuKfeAIC0tjT///JN//vmHzz77jO7duyv7ZsyYwfz5862Oz8/P5/Dhwxw+fJgdO3Ywd+5c9Hq9sv/MmTOMHz+e2NhYq/OOHTvGsWPHWLZsGfPmzaNZs2YVvt+XX35Zeb+FhYWEhoZe8WckhBC1kSTUQghxnXXq1IlTp06RmppKbGws4eHhVsl1p06dLnnu559/bpVMd+zYkSZNmrBv3z4OHTqE2WxmxowZNGzYkAEDBgCWoeVlk+mwsDCio6OJjY1l+/btl3yt5557Tkmmvb296d27N+fPn+fPP//EaDTy6aef0r59e6sb9Uvp0KGDkuRX9zDbiIgIJaE+ceKEsn3ZsmVKgqRSqejduzfe3t6sW7eO1NRUDh8+zBtvvMHMmTOVcyZPnqwk0y4uLtx6662o1WpWr15Nfn4++/bt4+OPP2bKlCmXjem9995TkulOnTrRrFkzCgsL+fPPP8nMzCQ5OZkPP/yQd99994rv748//uCDDz5Qvm/RogVt2rTh+PHj7NixA4CvvvoKf39/xo4dW+78Q4cOAZbPIDIyknXr1inDntetW0dcXBxhYWFXjONKTp48iV6v56677iI/P5/Q0FBUKlWlPweDwcCTTz6pJIiBgYF0796dpKQk1q9fj8lkYtq0abRp06bCOd3nz5+36v0sKSkhOzubDRs2cPbsWcAyuqHsg5fKxmgymXj22WeVZNre3p6+ffuiUqlYu3ZtucS8IkePHsXb25t+/fpx9OhRBg4cCMCbb76pJNNOTk7069cPk8nE77//TmFhIT///DPt2rXj3nvvBWD+/PnKz6pRo0ZER0ej0WjYvHkzsbGxGAwGXnvtNdauXYtarSYtLY2FCxcCoNPpuOWWWwgICCA1NVV5ILJ582Z+++037r77bqvPpDSZdnR05JZbbkGv17Nu3ToyMzNJTU1l/Pjx/Pbbb7i5uVX4fps1a0bHjh3Zvn07/fr1u+LPSAghaiNJqIUQ4jrr1KkTP/zwA2AZ9l02oXZ0dLQallpWYWEhn3zyifL9008/zYQJEwCUJGPp0qWApQfqtttuQ61WW93ct2vXjiVLlijzjCvqqQLYv3+/kmx7eHjw22+/4eXlBcDq1at56qmnAFi4cOFVJdQ33XQTN9100xWPqwpnZ2fl67K9hQsWLFC+fvPNN5Xk4JlnnmHQoEGkpqYqPfoBAQHs3r2b3bt3K9f8+eefCQoKAmDw4MEMHz4cjUbD7t27MZvNl112qTQp9/f3Z8mSJajVlhlVY8eO5fXXXyc8PJzIyMiren9lE/57772XqVOnKtebO3cu77//PgCffvop9957Ly4uLuWucd999zFt2jQARowYwe23305RURFgeQhRHQk1wLPPPsuIESOstlX2c/jzzz+Jj48HLAnismXLcHBwUK713nvvYTAYWLJkCdOnTy8XQ25uboVtupSrqyszZsygQYMGVY5x27ZtnDx5ErAs4/bll18qS7fFxsYyZMgQ5ed7OQs
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAF7CAYAAADPFOhcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACSa0lEQVR4nOzdd3gU1f4G8HdmW7Zkk82mEtJIgNCSUEVERREroFyv2MAK14Z6Rez3qvwUK4JdFBD1ilLECohdFEGlh95JSO89W2d+f2yyyZIACSTZ3eT9PA8Pyezs7Bk8ZvPuOed7BFmWZRARERERERFRmxO93QAiIiIiIiKizoqhm4iIiIiIiKidMHQTERERERERtROGbiIiIiIiIqJ2wtBNRERERERE1E4YuomIiIiIiIjaCUM3ERERERERUTth6CYiIiIiIiJqJwzdRERERERERO1E6e0GEBER+YrPP/8cjz32mMexyZMn4z//+Y/HMafTiWHDhqGqqsrj+L59+9q1fRdeeCGys7MBAB999BHOOuus07rOX3/9hZtuugkAEB0djZ9//rlN2peeno6lS5di48aNKCwshN1uh8lkQp8+fXDFFVdg3LhxEEXX5/0FBQU4//zzIUkSAODZZ5/FNddc0+x1q6qqcPbZZ8NmswEAXnzxRVx11VWYPHky/v7772afI4oitFotwsPDMXDgQEydOhU9evRok/skIiJqDY50ExERncSGDRuaHNuxY0eTwN3Vvfvuu5g4cSI+++wzZGRkoKamBna7HQUFBVi7di0efvhh3HrrraitrQUAhIeHe3xo8O23357w2j///LM7cAcEBGDMmDGnbI8kSaiursaRI0fw+eefY8KECdi2bduZ3SQREdFp4Eg3ERHRSRw8eBAFBQUIDw93H2suiHdlmzZtwpw5c9zf9+nTBykpKVAqldi2bRt27doFAPjzzz8xZ84cPPHEEwCAcePGuf8t//zzT5SUlCAkJKTJ9b/77jv316NHj4Zer29yzqBBgzB48GD3906nE0VFRfj+++9hsVhgsVjw5JNP4uuvv26bmyYiImohhm4iIqJmaLVa96js+vXrcdVVV7kfqw+KOp0ONTU13mieT1mxYoX76+uvvx5PP/20x+NPPvkkli5dCsA1hf/RRx+FQqHAJZdcgpkzZ8JqtcLpdOK7777D9ddf7/HcmpoarFu3zv39uHHjmm3DiBEjcO+99zY5Pn78eEyZMgWAa/r/sWPHEBMTc1r3SUREdDo4vZyIiKgZgwYNcn/deGTbarVi69atTc45kd9//x333HMPzjvvPPTv3x/nnnsupk+fjvT09BM+54svvsA//vEPpKam4pxzzsEzzzyDysrKk75ORUUFXnnlFVxyySUYMGAAzjrrLEyZMgW//fbbKdvY2BtvvIHevXujd+/eePTRR1v0nIKCAvfXBoOhyeNTpkzByJEjMXLkSKSlpaG6utp97qhRo9znrV69uslzf/31V1gsFgBAcHAwRo4c2ZrbwdChQz2+LyoqatXziYiIzhRHuomIiJoRHh6OuLg4ZGRkeITuLVu2uNcXDxs2zGMUtjFZljFz5kx8+umnHscLCgqwatUqrF69Gg8++CCmTp3q8fisWbPw0Ucfub+3WCz4+OOPsWnTJvfI+/Hy8vJw0003ISMjw33MZrPh999/x++//467774b999/f+v+AVqhR48e7n+HhQsXIicnB+PHj8ewYcOg0+kQGxuLhQsXNvvc8ePHu6ePb9q0qclU/jVr1ri/vuyyy6BSqVrVtuOLxHXv3r1VzyciIjpTDN1EREQnMGzYMGRkZCA/Px+HDh1CYmKiRwAfNmzYCZ/7wQcfeATuIUOGoFevXti+fTt27doFWZYxe/ZsREdH4/LLLwfgmsbeOHAnJCRg+PDhOHTo0AmrdAPAQw895A7coaGhGD16NMrLy/HDDz/A6XTi7bffxqBBg3Duueee8p4HDx7s/iCgX79+pzwfcFV4X758OWprayFJElatWoVVq1ZBpVKhf//+GDlyJC677DIkJiY2ee55552HoKAglJeXQ5IkfPfdd5g8eTIA1wcOv//+u/vcE00tB1z/dlarFYDrAw+r1Yrc3FyP0H3hhRciLCysRfdERETUVhi6iYiITmDYsGFYvnw5ANcU88ahW6fTYcCAAc0+z2Kx4K233nJ//8ADD+DOO+8E4KqqPXPmTCxZsgQAMHv2bFx66aUQRdG97hkABg4ciA8//BAajcZ93vz585u8Vnp6ujuQm0wmfP311zCbzQBcFcH//e9/A3CNQLckdI8YMQIjRow45XmNxcbG4u2338YDDzyAsrIy93G73Y6tW7di69ateOONN3DFFVfgqaeeQlBQkPsctVqNSy65BMuWLQMArFq1yh26165d614zHx0dfdLp/Fu2bMGWLVtO+PjAgQMxa9asVt0XERFRW+CabiIiohNovKXV+vXrUVlZ6a7EPWjQICiVzX92vW7dOvca7OjoaI8p5KIo4qGHHoJWqwUAZGdnY8+ePQCA7du3u8+bMmWKO3ADwNSpUyEIQpPXajzyPnr0aHfgBlzTsXU6HQDX1O36afHtYcSIEfjhhx/wyCOPICUlxb0fd2OrVq3C3Xff7d6bu17jEext27YhNzcXgGfV8nHjxjV7/6dy0UUXYcGCBfj000+brYxORETU3hi6iYiITiAiIgJxcXEAgL///hsbNmyA0+kE4BnIj9d4bXXv3r2hUCg8HjcYDIiNjXV/n5mZCcCzyFd8fLzHc4KCgjwCdb36gAoAn332mbsIWv2f+pFiu92OY8eOnfR+z5TRaMRtt92G5cuX488//8Rbb72FG264wWNke9OmTU3WWQ8dOhRRUVEAXFPDv/32W1itVvz666/uc8aOHXvS1542bRp27tyJNWvW4KKLLnIfX79+PSRJOq3ATkRE1BYYuomIiE6ivvp1ZWUlFixY4D5+svXcJxoBb0yWZffX9YGwcTB0OBxNntPcscajxjqdDqGhoSf8c6JCbGeivLwc33//PRYvXox3333XfTwoKAgXXXQRnnrqKXz//fce23QdPw1cEARcccUV7u9Xr16N33//3V3lvE+fPujZs+cp26JSqZCQkIBXX30VqampAFxbjtUHciIiIm/gmm4iIqKTGDZsGD777DMADdO/dTod+vfvf8LnREdHu7/et28fnE6nx2h3VVWVx6hz/ah2RESE+/iRI0eQnJzsPqe4uNhjvXS9xpW+x40bh//7v//zeFySpGanereV8vJyj/2xR40ahd69e3ucExwcjF69ernvrblp7uPGjXN/qLFjxw68//77Ho+1hkqlwvPPP4+rrroKNpsNNpsNjzzyCL744guo1epWXYuIiOhMcaSbiIjoJJqbRn6y9dwAcPbZZ3us2W4cIGVZxiuvvOIedY6Li3OH1MZ7Sn/00Uew2+3u7998881mX6vxiPt3332HvLw89/c//fQTBg4ciH/84x+YOXPmSe/zdMXGxqJHjx7u75966ilUVVV5nLNr1y6PtefHh3IASE5ORq9evdzfb968GYBrDXzjUfCWSkxMxN133+3+/uDBg1i0aFGrr0NERHSmONJNRER0EpGRkYiNjXWvuwZOvp4bAPR6PW6++WbMmzcPgKvy+G+//YaePXti27Zt7mJsAPDwww+7p5XfcMMN+PLLLyFJErZs2YIJEyZg+PDh2L17tzuEHm/o0KHo168fdu3ahbKyMowbNw5jxowB4KpebrFYsGvXLpxzzjktut/169dj/fr1AFxbhl122WWnfM60adMwffp0AMDWrVtx0UUXYeTIkTCZTDh27Bh+++0391r4sLCwE67PHjduHF555ZUm9xcZGdmith9vypQpWL16Nfbv3w8AmDdvHq688srTvh4REdHp4Eg3ERHRKRy/fvtk67nr3XfffRg/frz7+7///huLFy92B25RFPH44497FP0aMGAAHnjgAff3Bw4cwP/+9z9s3rwZCQkJGDlyZJPXEQQBc+bMcU8zr6iowIoVK7BixQp3EbXhw4fjnnvuadG9bt68GfPnz8f8+fOxdu3aFj3
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAF7CAYAAAAzAcOWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACv70lEQVR4nOzdd3iTZdvA4V929x7QlpbSMmTvJUsKTlAQUVBRFPFTX9frwK2g8ipuxYWIAooyBHEgikxB9t6jQAtddO+Z5Pn+SBsa2kJbWtK013kcheR+Rq4kd9Ncz71UiqIoCCGEEEIIIYQQokbU9g5ACCGEEEIIIYRwRJJQCyGEEEIIIYQQtSAJtRBCCCGEEEIIUQuSUAshhBBCCCGEELUgCbUQQgghhBBCCFELklALIYQQQgghhBC1IAm1EEIIIYQQQghRC5JQCyGEEEIIIYQQtSAJtRBCCCGEEEIIUQuSUAshxBW0bNky2rZta/Pz5ptvVtjPZDLRo0ePCvvWt6FDh1ofa9u2bbU+z7Zt26znGTp06GXHNXPmTOv5JkyYUOVjdurUybpfv379OHnyZIXjBw0aRF5eXqXnKP/84+LiLivm8u/b5Z6rtq/nhAkTrMctW7bssmKwh/LPu7Kfjh07MmDAACZMmMCPP/6I0Wi0d8hCCCGaGEmohRDCzrZs2VKh7MCBA+Tm5tohGsd05MgRHnnkEYqLiwHw9PTk22+/JSIiosK+586d49NPP73SIYp6UFJSQkpKCtu3b2fq1Kn897//RVEUe4clhBCiCdHaOwAhhGjqoqOjSU5OJiAgwFpWWZItKnfmzBkeeOAB6wUINzc3vv76a9q1a1flMfPnz2f06NG0adOm3uKaPHmy9ba7u3u9PU5TUv41VRSFkpIStm/fzpEjRwBYtWoVf//9N9dee629QhRCCNHESEIthBB24uzsTEFBAQCbN29m1KhR1m1lCbWLiwv5+fn2CM8hpKSkcP/995OamgpYXtNZs2bRuXPnix5nNBqZNm0aCxYsqLfYnnnmmXo7d1NV2WtqMpm4++672b17NwCrV6+WhFoIIcQVIwm1EELYSffu3fn3338BSwJdllAXFRWxZ88e6z6bNm266Hk2btzIwoULOXDgAOnp6Xh7e9OrVy8mTpxYZWL5888/891333Hy5Enc3Ny4/vrrefLJJy/6ONnZ2cyePZtVq1aRkJCAi4sLnTp14p577mHQoEHVft4zZ860drkePXo0b7/9drWPLS83N5fJkydz9uxZAAwGA1988QU9e/as1vE7d+5k+fLlNhcyLsZkMrF48WJ++uknTp48iVqtJiIiglGjRnHHHXeg1dr+SS0/5n3NmjWEhIRY76empjJz5kzWrFlDdnY2ERER3H///fTq1YvBgwcD0Lt3b7777rtKYykuLuarr75i2bJlpKSkEBoayh133MGECRNQqVRVPocNGzbw2WefcfToUdzd3Rk0aBBPPPEEzZo1q7Cv0Whk2bJlLF++nFOnTpGXl0dQUBCDBg1i0qRJFY55/vnn+fnnnwH44osv2Lx5M8uWLUNRFKKionjvvfcwmUwsXLiQ3377jejoaPLz83FxcSEiIoIRI0Zw5513otFoLvFO2NJoNHTv3t2aUKelpVXY599//+Wbb75h//79FBUVERQURFRUFJMnT8bLy6vC/jV9f5YtW8YLL7wAWFrRQ0ND+fTTT8nMzCQ0NJTFixfj4uJS4zqUlZXF7NmzWb9+PXFxcZSUlODp6Un79u25++67GTJkSIXYN2zYwIIFCzh48CBZWVnodDqCg4MZPHgwDz74YKXPtz7eayGEaCokoRZCCDsJCAggLCyM2NhYmy7eu3fvto4F7t27d5UJtaIoTJs2jR9//NGmPDk5mRUrVvDHH3/w9NNP23STBZg+fTrz58+33i8sLOT7779n586d1hbzCyUlJXHPPfcQGxtrLSsuLmbjxo1s3LiRRx55hCeeeKJmL8BlKC4u5uGHH7Z29dXpdHzyySf069fvkse6ublZu4e/8847DB06FA8Pj4seYzQaefTRR1m3bp1N+f79+9m/fz9r1qzhyy+/RK/XX/Lx4+Pjueuuu0hMTLSWHT58mGeeeYZx48Zd8vji4mImT57M1q1brWXR0dFMnz6d1NRUnnrqqUqP+/XXX9m6dat1jHFRURHLli1j48aNLFiwgLCwMOu+GRkZPPLII9YktUxMTAwxMTH8/PPPzJw5s8rX+6OPPuLYsWPW+y1atAAsLcx//PGHzb45OTns3buXvXv3cvDgQWbMmHHJ16C8/Px8mwn0goODbbZ/9dVXvP/++zZlp0+f5uuvv2blypXMmzfPGh9c/vuzYcMGjh8/br3v6emJi4tLjetQbm4ut99+OzExMTb7p6WlsXHjRjZt2sSbb77JbbfdZt32448/MnXqVJv9jUYj0dHRREdHs2nTJr7//nub+l5f77UQQjQVMimZEELYUe/evQHLRFllM1KXT67Ltldm7ty5Nsl0z549ufPOO+nQoQNgSbjfe+89mwRm8+bNNsl0eHg448ePp3fv3hw9epT09PRKH+vZZ5+1JtN+fn7ccccdXH/99dbWxM8//5yNGzdW6zn36NGDyZMnM3nyZGtrX02YTCaeeuoptm/fbi3r2LFjpa11lbn99ttp3rw5YElOPvzww0se88UXX1gTIZ1Ox4gRI7j99tvx9PQELC2g1Z3o7NVXX7UmaxqNhuuuu47bbrsNX19fFi5ceMnjU1JS2LZtG9dccw0TJkywPheAefPmUVhYWOlxW7ZswcvLizFjxnD99ddbW0NTUlJ48cUXbfZ94YUXrAmWVqvl2muvtXndcnJy+M9//sOZM2cqfaxjx44RGhrK3XffTfv27RkxYgT79++31kUXFxdGjhzJxIkTGTp0qLVVffny5RedP+C9996z/syYMYNXXnmFW265hQMHDgCgVqsZO3asdf+tW7fywQcfWO9fffXV3HXXXbRs2RKwJM/PPvuszWNc7vtz/Phx3NzcuOOOOxg8eDAjR44Eal6HfvzxR2sy3bx5c+644w7uvfdea68TRVGYPn269eJQSUmJtWVYpVIxZMgQJk6cyKhRo3B1dbW+L99++61NvPXxXgshRFMiLdRCCGFHvXv3ZsmSJYAl4YmIiLAZP92pU6dKjyssLOSzzz6z3v/vf//LQw89BIDZbGbatGnWL//vvfce119/PWq1mkWLFlmP6datG/PmzcNgMFj3mz17doXH2r9/vzV59fb25tdff8XX1xeAlStXWruKz5kzh4EDB17yOffv35/+/ftfcr+q7N69u8JMznv27GHp0qWMGTPmkse7uLjw8ssv85///AeAhQsXMmbMGDp27Fjp/sXFxTYXIWbPnm1trXvwwQe5+eabyc/PZ8GCBTz88MM4OztX+dixsbE2PQ4++ugj63jf5ORkbr31VlJSUi75HJ577jnuu+8+AO69916GDx+OoigUFhYSGxtb6RJrHh4eLF++3Np9d8OGDTz44IOApft7dHQ0kZGR7N6925r4aTQa5s2bZ+1Gn5uby8SJEzlw4AB5eXl8+umnvPPOOxUey2Aw8MMPP+Dv728t+/33362377nnHv773/9a73/33Xfs2rWLyMjIi07gVln9LOPk5MTLL79s8zszZ84ca10p34uiuLiYO+64g8OHD7Nnzx527txJz5496+z9mTFjBsOGDbPer00dKhvKAJZeJVdffTVgSaRfffVVjEYjERER5OXl4ebmRkZGhjW57tatG7NmzbIeP3bsWGbPnk1ERIT1ghtQb++1EEI0JdJCLYQQdtSnTx/r7c2bN5OTk8OhQ4cAy/jpC8dUltm0aRM5OTmApYtr+W7darWaZ5991prYxcfHW7tG79u3z7rfAw88YE2mwTL2s7Lxt+VbDKOioqzJNMANN9yAi4sLYEnKyrqq16eyBEmtVtO+fXtr+YwZM6qV7AAMGzbM2qJddgHCbDZXuu+hQ4fIzs4GIDQ01Kbra4sWLay9CHJzc9m/f/9FH7dsbDxA69atbSbPCggI4K677rpk7Gq1mttvv90mhvLjYqt
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAF7CAYAAAAzAcOWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACucklEQVR4nOzdd1zU9R/A8dcNOPYUcbHcuDVwlJq5GmalZvWzYWZDs6Fmtksrm1ppS1NzlLmysuHMkZqaqbkYblBBQNnzuPH9/XFycgIKCBzj/Xw8fHD3Xfc++Aj3/n7en89HpSiKghBCCCGEEEIIIcpEbe8AhBBCCCGEEEKImkgSaiGEEEIIIYQQohwkoRZCCCGEEEIIIcpBEmohhBBCCCGEEKIcJKEWQgghhBBCCCHKQRJqIYQQQgghhBCiHCShFkIIIYQQQgghykESaiGEEEIIIYQQohwkoRZCCCGEEEIIIcpBa+8AhBBCVJyffvqJV155xWbbww8/zOuvv26zzWQy0bVrV7Kysmy2Hz16tFLj69u3L3FxcQAsXryYbt26les6//zzD4888ggAjRs3ZvPmzdcVV+HvW1muV1Hvpzr5/PPP+eKLL4rdp1Kp0Ol0+Pr60rJlSx566CF69uxZxRHWbBXddoUQQtiX9FALIUQtt2vXriLbDh8+XCSZFuJaFEUhLy+PuLg4tmzZwujRo1m0aJG9wxJCCCHsRnqohRCiljtx4gRJSUnUr1/fuq24JFuU3QMPPEBGRgYAjRo1snM0Fa9hw4bceeed1udms5ns7Gw2b95MUlISANOnT+f222+3aV+iZI0aNeKJJ54AwMPDw87RCCGEuF6SUAshRC3l7OxMbm4uADt37uSee+6x7itIqF1cXMjJybFHeLXCk08+ae8QKlVAQACTJk0qsv25555j4MCBZGVlkZ+fz7Zt27j33nvtEGHNU9L3VAghRM0kJd9CCFFLdenSxfq4cI+0Xq/nv//+K3JMSbZv3864cePo3bs37dq1o1evXkycOJFDhw6VeM7PP//M0KFD6dixIzfddBPvvPMOmZmZV32djIwMZsyYwa233kr79u3p1q0bjz/+ONu2bbtmjIV9/vnntGrVilatWvHyyy+X6dyy6tu3r/W1/vnnH+v2l19+2bp927ZtREdHM3bsWMLDw+ncuTMjR47k33//Lfaap0+fZvLkyfTs2ZN27drRu3dvJk+ezMmTJ696/C233EK7du2s50yYMKHIOT/99JM1runTp7NixQp69+5Nhw4duPPOO0t9c8XX15emTZtanycnJ9vsN5lMLF26lGHDhtGpUye6dOnC8OHDWbJkCUajsdhrRkZGMmbMGMLCwujcuTOPPfYYhw4dYvXq1daYP//882K/x5s3b+bdd9+lS5cudO7c2SZhLWu7OnnyJC+99BJ9+/a1fj/79u3Liy++yIkTJ4ocbzKZWLJkCQ888ABhYWG0adOGsLAw7r//fr777jtMJpPN8f/884817r59+xa5ntFoZMWKFYwYMYLu3bvTvn17br31VqZNm0ZCQkKR4wu396VLlxIXF8ekSZPo3r07HTt25L777uPPP/8s9r0KIYS4ftJDLYQQtVT9+vUJCgoiNjbWJqHev38/+fn5AHTt2pUdO3YUe76iKEydOpWlS5fabE9KSuKPP/5gzZo1vPDCC9by1QLTpk1j8eLF1ud5eXl8//337N2719pjfqWEhAQeeeQRYmNjrdvy8/PZvn0727dv5+mnn+b5558v2zegmtizZw+LFy9Gr9dbt+3evZt9+/bx/fff06lTJ+v2Xbt28fTTT9sktomJiaxevZp169bx+eefc/PNN1v3nT59mhEjRpCSkmLzmomJiaxZs4YtW7awcuVKWrRoUSSuv/76i2PHjlmfe3p64uLiUqr3dPbsWZvkskmTJtbHRqORZ555hi1btticc+jQIQ4dOsSmTZuYPXs2jo6O1n3btm1j3Lhx1nYJ8Pfff7Nnzx7uuuuua8bz2Wef2UyoFxAQAJS9XR05coSHH364yI2FuLg467jxxYsX06ZNG+u+SZMmsWbNGpvjMzMzOXDgAAcOHODIkSN8+OGH13wPAKmpqTz99NPs37/fZntMTAwxMTH8/PPPfP755/To0aPY80+ePMlnn31GWlqaddvBgwcZN24cs2bN4tZbby1VHEIIIUpPEmohhKjFunbtSmxsLImJiZw8eZJmzZrZJNddu3Yt8dyFCxfaJNNhYWG0bNmSgwcPEhERgaIoTJ8+ncaNG3PHHXcAltLywsl0SEgI3bt35+TJk+zZs6fE13rxxRetSU+9evXo168f6enpbNy4EZPJxFdffUWXLl3o1avXNd/zDTfcYE3y27Zte83jK9vcuXNxd3fnrrvuIisri7Vr1wJgMBj47rvvrAl1amoq48ePtyZzLVu2JDw8nGPHjvHvv/+i1+uZNGkSa9eupV69egDMmDHDmky3atWK7t27k5WVxcaNG8nIyCA3N5dly5bxxhtvFInr2LFjuLm5MWjQIBISEortLT179izTp0+3PjcYDKSmprJ582ZrnH5+fjbnfv3119Zk2sHBgVtvvRUXFxfWr19Peno6f//9N1988QUTJ04EICsrixdffNGaTHt5edG3b19yc3P5888/WbVq1TW/x0ePHiUwMJDevXuzf/9+67jvsrarmTNnWt9Xu3bt6NSpE2azma1btxIfH09mZibTpk1jyZIlgOUmQUEy7eLiQr9+/fD19eXMmTNs2bIFRVH45ZdfuOeee0pMggt75ZVXrMm0Vqulb9++eHl5sX37ds6fP09mZibjxo3jl19+ITAwsMj53333HTqdjrvuugutVstvv/2GwWAAYMGCBZJQCyFEJZCEWggharGuXbuycuVKwNL7WTihdnFxoX379sWel5eXx5dffml9PmHCBMaMGQNYJqaaOnUqy5YtAyyTUt12222o1WqWL19uPadz584sWrQInU5nPW7u3LlFXuvQoUPWZNvb25tff/0VX19fANauXcv48eMBmD9/fqkS6htvvJEbb7zxmsdVFRcXF3766SdrAuTh4WH9Ph0/ftx63I8//mjtWezWrRvffvstWq3lz/TUqVP54YcfyMjIYMWKFTz99NMAtG/fHrVaTUpKCvPnz7d+r7t27cpLL70EWJLiknz44Yf079+/xP3nz58v9mdWwN/fny+++AJnZ2fA0vtb+IbK3LlzrYnkk08+yV133UVOTg5Llixh7NixODs7s3btWuv7dnV1ZdWqVdYe7127dvHoo4+W+PoFdDodP/zwA35+ftZt5WlXZ86cASw3Ar7//nvr+xo/fjyTJk0iICCA5s2bYzKZ0Gg01uMBHnnkESZMmGB9/t1337Fv3z6aN2+Ou7v7Nd/D/v37rTciNBoNixYtIiwsDLDcdHj00Uc5fPgw2dnZfPHFF3z00UdFrqFWq1m0aBGdO3cGIDg4mE8++QSwbWtCCCEqjoyhFkKIWqzwusg7d+4kMzOTiIgIwDJ+uiBhu9KOHTusY54bN25sU9atVqt58cUXrclGXFwcUVFRgKW8tMDjjz9uTfAAnnjiCVQqVZHXKtxjXtDDV+D222+3liHv3bvXpiS4pujbt69Nb2Lv3r2tjwuXFu/evdv6eNiwYTY/m6FDh1ofF/5+PfXUU8yaNYvvv/8enU7HhQsX2LBhA5s2bbIek5eXV2xcrq6uxfZKl0arVq348MMPWb9+PR06dLBuj4iIsM56HhgYaNMrGxAQYK2IyMrKso7BL1zefM8999iUj/fo0aNUN0e6d+9uk0xD+dpVQUWDwWDgtttu4+2332bNmjXk5eUxd+5c3nzzTUaMGIFGowEgNDTU2qbnzp3L6NGjmT9/PgcOHOCBBx7gs88+45lnnqFdu3bXfA8FlQsAgwYNsibTAG5ubrzwwgvW55s3b8ZsNhe5RseOHa3JNGAzPEAmHxRCiMohPdRCCFGL+fv7W8dR79mzh127dlknSSqcbF+p8JjTVq1aWROIAm5ubgQGBlrHrZ45c4a2bdty8eJF6zHBwcE253h6euLr62tzDFh6QQv8+OOP/Pj
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1200x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAAF7CAYAAAAzAcOWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACpW0lEQVR4nOzdd1zU9R/A8dctjj1FUBTEjXuilpa52pbZTkuzYcP23lY2fpWlWVmutEzNNM3K0tQ0cw80GU5AQQFlz5vf3x8HJyeogMAx3s/Hw+C+6953fIJ7fz/vz+ejUhRFQQghhBBCCCGEEJWidnYAQgghhBBCCCFEfSQJtRBCCCGEEEIIUQWSUAshhBBCCCGEEFUgCbUQQgghhBBCCFEFklALIYQQQgghhBBVIAm1EEIIIYQQQghRBZJQCyGEEEIIIYQQVSAJtRBCCCGEEEIIUQWSUAshhBBCCCGEEFWgdXYAQggh6o7ly5fz8ssvO2wbO3Ysr732msM2i8VCZGQkeXl5DtsPHjxYo/ENGTKE5ORkABYsWEC/fv2qdJ3t27dz7733AhASEsL69esvKa7PP/+cGTNmOGx7+eWXGTdunMO29PR0Lr/8chRFsW879/nHjh3Ljh07AHj88ceZNGnSRZ+/9OspTa1Wo9Vq8fLyIiwsjNtvv52bb74ZlUp1wdhLqFQq9Ho9AQEBtG/fnjFjxjBw4MCLxiOEEEI0FtJDLYQQ4oK2bt1aZtt///1XJpkWjrZs2VJm27Zt2xyS6ZpmtVoxGo2kp6ezZ88eXnrpJV555ZUKn68oCkVFRSQnJ7NhwwYmTJjA/PnzazBiIYQQon6RHmohhBAXdOTIEdLS0mjatKl9W3lJtnC0c+dOTCYTOp3Ovq223rcHH3wQsFUSZGdn888//5CWlgbYqhCuvvpqBg8eXOa8Zs2accMNN9gfW61W8vPzWb9+vf38jz/+mGuvvdahPQghhBCNlSTUQgghyuXm5kZhYSFg6229+eab7ftKEkN3d3cKCgqcEV6dVfK+FRQUsG/fPvr06WPfV1vv23PPPefwODc3lzvuuIOjR48CsGzZsnIT6pYtW5Y5F+CJJ55gxIgR5OXlYTQa2bRpE7feemuNxC6EEELUJ1LyLYQQoly9evWyf1+6Z9VgMLB3794yx5zPP//8w2OPPcYVV1xBly5dGDRoEM888wz79+8/7zk///wzt9xyC927d+fyyy/nnXfeITc394LPk5OTwyeffMLVV19N165d6devHw888ACbNm26aIylff7553To0IEOHTrw0ksvVepcgJ49e9q/L132nZSURFJSElCx9606eXl5OSTAx48fr9T5AQEBtG7d2v44PT3dYb/FYmHRokWMHj2aHj160KtXL2677TYWLlyI2Wwu95oxMTFMnDiRPn360LNnT+6//37279/PypUr7e//559/bj/+pZdesm9fv3497777Lr169aJnz54ONwEq2w6OHj3Kiy++yJAhQ+jSpQtdunRhyJAhPP/88xw5cqTM8RaLhYULF3LnnXfSp08fOnXqRJ8+fbjjjjv47rvvsFgs5T5PRkYGM2bM4MYbb6Rnz5707NmTW265hVmzZtlvXJU2ZMgQ++tNSkrigQcesL+e7777rtznEEIIUfukh1oIIUS5mjZtSlhYGImJiQ4J9Z49ezAajQBERkayefPmcs9XFIXJkyezaNEih+1paWn89ttv/P777zz77LP28uQSU6ZMYcGCBfbHRUVFfP/99+zatavcxAMgJSWFe++9l8TERPs2o9HIP//8wz///MOjjz7Kk08+Wbk3oIq6devG3r17KSwsZMuWLTzxxBOA402JC71vtaGy47hPnDjhkFy2aNHC/r3ZbObxxx9nw4YNDufs37+f/fv3s27dOmbOnImLi4t936ZNm3jsscfs7Qjg33//ZceOHYwcOfKi8Xz22WcOE+C1bNkSqHw7OHDgAGPHji1TLZCcnGwfN75gwQI6depk3/fcc8/x+++/Oxyfm5tLVFQUUVFRHDhwgA8//NBh/4EDB3j00UdJTU112B4dHU10dDQrVqxg1qxZNG/evNzX++ijj9pfr9FopG3bthd9j4QQQtQOSaiFEEKcV2RkJImJiaSmpnL06FHatGlTJjE8n2+//dYhme7Tpw/t27dn3759REdHoygKH3/8MSEhIVx33XWArUe3dDIdHh5O//79OXr0qH3m6/I8//zz9iSqSZMmDB06lOzsbNauXYvFYuHLL7+kV69eDBo06KKvuXfv3vYkv3Pnzhc9/lxarZaePXuyZcsW++Rtnp6ebNu2zX7Mhd63mpCbm8vSpUvtj0v3Npd24sQJPv74Y/tjk8lEZmYm69evtyedgYGBDBkyxH7MV199ZU+mdTodV199Ne7u7vz5559kZ2fz77//MmPGDJ555hkA8vLyeP755+3JtK+vL0OGDKGwsJC//vqLZcuWXfT1HDx4kNDQUK644gr27NljH/dd2XYwbdo0++vq0qULPXr0wGq18vfff3Py5Elyc3OZMmUKCxcuBGw3CUqSaXd3d4YOHUpAQADHjx9nw4YNKIrCihUruPnmmxkwYABg6zGfNGmSPZn28/Pjqquuwmg02t/XI0eO8Mgjj/DTTz85jLkv/XpL/v/Zv39/lWe3F0IIUf0koRZCCHFekZGR9kRs69atDgm1u7s7Xbt2Lfe8oqIivvjiC/vjp59+mokTJwK2ia4mT57M4sWLAdskV9dccw1qtZolS5bYz+nZsyfz589Hr9fbj5s1a1aZ59q/f7892fbz8+OXX34hICAAgNWrV/PUU08BMGfOnAol1JdddhmXXXbZRY+7kMjISLZs2YLZbGbnzp1cddVV9oS6VatWBAYGXtL1L6YkKbZYLGRkZPDvv/9y+vRp+/7zjX8+depUue9xiaCgIGbMmIGbmxtg6y0tfQNk1qxZ9kTyoYceYuTIkRQUFLBw4UIeeeQR3NzcWL16NVlZWQB4eHiwbNkye4/31q1byyw1Vh69Xs8PP/zg8D5WpR2UlL7rdDq+//57++t66qmneO6552jZsiVt27bFYrGg0WgcSuXvvfdenn76afvj7777jt27d9O2bVu8vLzs23/44QdOnjwJ2JZIW7RoEUFBQYCt3Pz2228nLy+PuLg4Vq5cWe7PpnPnznz33Xeo1TJSTwgh6hr5zSyEEOK8SveEbdmyhdzcXKKjowHbOGCttvz7sps3b7aPeQ4JCXEo61ar1Tz//PP25CU5OZnY2FgA9u3bZz/ugQcesCfTYJu5uvT6ySVK95iX9BiWuPbaa3F3dwdg165dDiXGNal0D/SWLVs4dOgQZ86cAaiV3sVZs2Yxa9Ys5s6dy4oVKxyS6fvvv7/Sa0l36NCBDz/8kD///JNu3brZt0dHR5OTkwNAaGioPZkGWxl2yfuQl5dnHzO/Z88e+zE333yzQ/n4gAEDKnQzo3///mVuSlSlHZRUIJhMJq655hrefvttfv/9d4qKipg1axZvvPEGd999NxqNBoCIiAh7G5w1axYTJkxgzpw5REVFceedd/LZZ5/x+OOP06VLF/tzr1692v79I488Yk+mAdq0acPYsWPtj//6669yX+91110nybQQQtRR0kMthBDivIKCguzjqHfs2MHWrVvtky5dKDEsPYa1Q4cO9oSkhKenJ6GhofZxocePH6dz5872pBNsPbml+fj4EBAQ4HAM2HpVS/z000/89NNP5cZkMpk4ceIEbdq0ucArrh7dunWzz/a9detW+xhfqJ2EujS9Xo+vry8dO3bkjjvuYOjQoec9NjIykvnz55Oens7ixYuZMWMGAIcOHSIpKcl+E6RE6ff++PHjdOjQ4bzXPnr0KP369bMvvwW2kv5ztW3bttw1vEsLCQkps60q7eD5558nOjqahIQEUlJSWLhwob28u127dowcOZIxY8bYk/E2bdrwzDPPMHXqVCwWC5s3b7aPhXd3d+eKK65g3LhxDhPTle7VLm8IQeltJ06cqPDrFUIIUTdIQi2EEOKC+vbtS2JiIrm5ucyePdu+/ULjgM/Xc11a6YmxSnr9SvdAlzc
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"import sklearn\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"# Models to use\n",
|
||
|
"models = [\n",
|
||
|
" LinearRegression(),\n",
|
||
|
" DecisionTreeRegressor(),\n",
|
||
|
" RandomForestRegressor(),\n",
|
||
|
" SVR(kernel='poly'), # SVM regressor\n",
|
||
|
" KNeighborsRegressor(),\n",
|
||
|
" MLPRegressor(),\n",
|
||
|
"]\n",
|
||
|
"\n",
|
||
|
"months_to_predict_array = [3, 6, 12]\n",
|
||
|
"\n",
|
||
|
"for months_to_predict in months_to_predict_array:\n",
|
||
|
" for model in models:\n",
|
||
|
"\n",
|
||
|
" X_train_model = X_train.copy()\n",
|
||
|
" X_test_model = X_test.copy()\n",
|
||
|
" y_train_model = y_train.copy()\n",
|
||
|
" y_test_model = y_test.copy()\n",
|
||
|
"\n",
|
||
|
" # fit the model, don't use the last row since has no truth\n",
|
||
|
" model = model.fit(X_train_model[:-1], y_train_model)\n",
|
||
|
"\n",
|
||
|
" model_name = model.__class__.__name__\n",
|
||
|
"\n",
|
||
|
" y_pred = predict_next(months_to_predict, X_train_model, y_train_model, model)\n",
|
||
|
"\n",
|
||
|
" plt.figure(figsize=(12, 4))\n",
|
||
|
" # plt.plot(X_train_model[:-1].index, y_train_model, label='Train')\n",
|
||
|
" plt.plot(X_test_model[:months_to_predict].index, y_test_model[:months_to_predict], label='Truth')\n",
|
||
|
" plt.plot(X_test_model[:months_to_predict].index, y_pred, label=model_name)\n",
|
||
|
" plt.legend(loc='upper left')\n",
|
||
|
"\n",
|
||
|
" mae = mean_absolute_error(y_test_model[:months_to_predict], y_pred)\n",
|
||
|
" mse = mean_squared_error(y_test_model[:months_to_predict], y_pred)\n",
|
||
|
" r2 = r2_score(y_test_model[:months_to_predict], y_pred)\n",
|
||
|
"\n",
|
||
|
" plt.title(f\"Model: {model_name}\", fontsize=16, fontweight='bold')\n",
|
||
|
"\n",
|
||
|
" plt.text(0.5, 0.9, f\"MAE: {mae:.2f}\", transform=plt.gca().transAxes)\n",
|
||
|
" plt.text(0.5, 0.85, f\"MSE: {mse:.2f}\", transform=plt.gca().transAxes)\n",
|
||
|
" plt.text(0.5, 0.8, f\"R^2: {r2:.2f}\", transform=plt.gca().transAxes)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### Conclusion\n",
|
||
|
"\n",
|
||
|
"The linear regression with default value has a perfect score, so I think I could be happy with this result and stop here.\n",
|
||
|
"\n",
|
||
|
"# Optional : Darts\n",
|
||
|
"\n",
|
||
|
"Tring using the [Darts library](https://unit8.com/resources/darts-time-series-made-easy-in-python/)."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 37,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.934547800Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"from darts import TimeSeries"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 38,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.936697200Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": " Month Sunspots\n0 1749-01 58.0\n1 1749-02 62.6\n2 1749-03 70.0\n3 1749-04 55.7\n4 1749-05 85.0",
|
||
|
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Month</th>\n <th>Sunspots</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1749-01</td>\n <td>58.0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1749-02</td>\n <td>62.6</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1749-03</td>\n <td>70.0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1749-04</td>\n <td>55.7</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1749-05</td>\n <td>85.0</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||
|
},
|
||
|
"execution_count": 38,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"df_darts = pd.read_csv('data/monthly-sunspots.csv')\n",
|
||
|
"df_darts.head()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 39,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.937699300Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"series = TimeSeries.from_dataframe(df_darts, 'Month', 'Sunspots')\n",
|
||
|
"series.plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 40,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.938696500Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from darts.dataprocessing.transformers import Scaler\n",
|
||
|
"\n",
|
||
|
"scaler = Scaler()\n",
|
||
|
"series_scaled = scaler.fit_transform(series)\n",
|
||
|
"series_scaled.plot()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Splitting the series"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 41,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.939697Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"train_series, test_series = series.split_before(pd.Timestamp('19200101'))\n",
|
||
|
"\n",
|
||
|
"train_series.plot(label='training')\n",
|
||
|
"test_series.plot(label='test')"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Missing values"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 42,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.940697100Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"# example code\n",
|
||
|
"from darts.utils.missing_values import fill_missing_values\n",
|
||
|
"\n",
|
||
|
"values = np.arange(50, step=0.5)\n",
|
||
|
"values[10:30] = np.nan\n",
|
||
|
"values[60:95] = np.nan\n",
|
||
|
"series_ = TimeSeries.from_values(values)\n",
|
||
|
"\n",
|
||
|
"(series_ - 10).plot(label=\"with missing values (shifted below)\")\n",
|
||
|
"fill_missing_values(series_).plot(label=\"without missing values\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Train and predict"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 43,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.941697600Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<matplotlib.legend.Legend at 0x29743e93580>"
|
||
|
},
|
||
|
"execution_count": 43,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4wAAAGDCAYAAABgA55eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADYEklEQVR4nOydd5gTVdvG75TdbLYvu0vvVQERpYmCCqgoKsWKChYsoKgorx17gxcVFD8LIqioKKAIiAooooKKAtKl97aU7SVbUr4/8s7knJkzk2Q3Pc/vuriYzEyS2Uwyc+5zP8XgcrlcIAiCIAiCIAiCIAgFxnAfAEEQBEEQBEEQBBGZkGAkCIIgCIIgCIIghJBgJAiCIAiCIAiCIISQYCQIgiAIgiAIgiCEkGAkCIIgCIIgCIIghJBgJAiCIAiCIAiCIISQYCQIgiAIgiAIgiCEkGAkCIIgCIIgCIIghJjDfQC15dSp0nAfghCn04GKikIkJ2fBaDSF+3CIIEDnOD6g8xz70DmOfegcxz50juMDOs/BIzc3zes+5DAGGJfLxf1PxB50juMDOs+xD53j2IfOcexD5zg+oPMcXkgwEgRBEARBEARBEEJIMBIEQRAEQRAEQRBCSDASBEEQBEEQBEEQQkgwEgRBEARBEARBEEJIMBIEQRAEQRAEQRBCSDASBEEQBEEQBEEQQkgwEgRBEARBEARBEEJIMBIEQRAEQRAEQRBCSDASBEEQBEEQBEEQQkgwEgRBEARBEARBEEJIMBIEQRAEETJcLhdcLle4D4MgCILwERKMBEEQBEGEhMOHD6FXr664/PJ+sNls4T4cgiAIwgdIMBIEQRAEERLGjbsPBw7sx4YN/2DGjPfCfTgEQRCED/glGHft2oX77rsP/fv3x2WXXYZnnnkGBQUFAICJEyeid+/e6Nu3r/xvwYIF8nOXLFmCoUOHok+fPhg5ciQ2b94c2L+EIAiCIIiI5u+/18jLhw4dCuOREAQRz+Tl5eGnn5YF5LXsdjvmzv08IK8VqfgsGCsrK/HAAw+gS5cuWLZsGebNm4fi4mK88MILAIDt27djwoQJWLVqlfzvmmuuAQCsX78ekydPxvPPP4+VK1di4MCBGD9+PCorK4PzVxEEQRAEEXFUV1fLy0lJljAeCUEQ8cwrrzyHv/76MyCv9eOPS/H221MD8lqRis+CMS8vDx06dMDdd9+NhIQEZGZm4tprr8XGjRtht9uxZ88enHnmmcLnLly4EJdddhm6du2KhIQEjBgxAhkZGVi+fHnA/hCCIAiCIKKHxEQSjARBhIdAFt6KhyJeZl93bNmyJaZNm8atW7lyJTp27Ijdu3ejpqYG77//PjZt2oTU1FQMHjwYt956K4xGI/bu3YvBgwdzz23dujV2795d6wN3Oh0ReYKcTjv3PxF70DmOD+g8xz50jsOL2WyCwxHcz57OcexD5zg+COR5HjfuXmzcuAEbN/6DDRvW4bPP5mPmzOn48cdlKC8vQ6tWrTFq1D3o0aMXAMDhcGDGjPfw00/LUVRUiEaNGuO6627EkCHX4IcflmDSpJcBAH36dMebb76Dc87pVudjjDR8FoxKpk+fjl9//RUzZsxAYWEhunXrhuHDh2PixInYsWMHHnvsMRiNRtx6662oqKiA1Wrlnp+UlISKiopaH3hFRWGtnxsKqqrKwn0IRJChcxwf0HmOfegchweTCbDZikLyXnSOYx86x+Hj+++/x9SpU1FeXh7y905JScHDDz+MQYMG+fycCROewrPPPovc3Fzcd999ePnlZ3Dw4EE8+ugjyMnJwZo1a/DEE//BM888g169emHRokVYufInPPnkE8jOzsZff/2FKVMmo3Hj+ujduwfGjBmD999/H3PmzEFaWlrIrmuBI8vrHn4LxrKyMrzwwgvYuXMnZsyYgbZt2wIAevToIe/TuXNnDB8+HD/++CNuvfVWWK1WVb5iZWUlsrK8H6AWyclZEeswVlWVwWJJhdFYaz1ORDB0juMDOs+xD53j8JKcnAarNTOo70HnOPahcxx+PvxwFvbu3Ru29585cxauvfZmn/e3WjNhsSQhOTkVDocJv/zyC6ZP/whnnOFOrWvbthMOHTqKb75ZiIsvHohTpwpgtaagZcsOyM7ORsuWHdCmzRlo06YtMjPrITMzBwDQpEnroPx9kYBfv6wjR47gwQcfROPGjTF79mxkZmYCAH777TecPHkS1113nbxvdXU1LBZ3fkKbNm2wb98+7rX279+PCy64oNYHbjSaav3cUGA0mmEy0YUrlqFzHB/QeY596ByHB5cLIfvc6RzHPnSOw8cDDzyESZNeRllZMF1eF1wuFwwGAwCDvDY1NRX33/9QLc69AQaDURa6Dz10H7fVbrcjNTUNJpMZ1157I1at+hXXXXc1OnQ4Ez17nof+/S9FTk59AB5NEsvfP5//spKSEowZMwY9evTAM888A6PRUy/H6XRi6tSpaNq0KXr16oUtW7bgyy+/xPjx4wEAgwcPxqOPPopLL70UXbt2xbx581BQUIB+/foF/i8iCIIgCCLiqampCfchEAQRAK6+eiiuvnpoUN/D4bDDZiuC1ZoZUGHmcjkBAO+8MwPJySncNknrNGvWHHPnLsSGDeuwdu1fWLXqF8yePQtPPfUcrrjiqoAdSyTj8ye+ePFi5OXl4ccff8RPP/3EbVu1ahUeffRRvPbaazhx4gSys7MxevRoOZ64Z8+eePzxxzFx4kScPHkSrVu3xrRp05CRkRHYv4YgCIIgiKigpqba+04EQRBBwO1UAq1atQEAnD59Gueff4a8ffr0d2A0GnH33fdi/vwvkZWVhUsuGYgePc7DffeNw0MP3YcVK5bjiiuukl8rlvFZMI4YMQIjRozQ3D506FAMHTpUc/ugQYP8SkglCIIgCCJ2UNYdqKmhqpYEQYQHqzUZx48fQ2pqKs4/vy9ef30ixo9/DK1atcGvv67EZ599jCeeeAYAUFCQj48/noGkpCS0bdseBw7sx+7dO3H99Tf977XchT137NiOVq1awWJJCtvfFSxiN9iWIAiCIIiIoaqqintcXU0OI0EQ4WHo0GvxyivP4bbbbsKCBd9hxox38dprE1FaWoLGjZvgsccm4Mor3S0B77xzNBwOB6ZMmYzCwgLUq5eNYcOux8iRdwAAzj23Bzp27Ix77x2FZ555Cf37XxLOPy0oGFyRWGrUB06dKg33IQgJVow1ETnQOY4P6DzHPnSOQ0t+fj7OPLOV/HjUqLsxadIbQX1POsexD53j+IDOc/DIzU3zuo/R6x4EQRAEQRB1pKyMn+ilkFSCIIjogAQjQRAEQRBBR1lyv7y8lCqlEgRBRAEkGAmCIAiCCDpKwbhgwVfo0aMLiooKw3REBEEQhC+QYCQIgiAIIuiUl6trDxw7dhRvvPHfMBwNQRAE4SskGAmCIAiCCDrl5eXC9cePHw/xkRAEQRD+QIKRIAiCIIigowxJlTAaY7/pNUEQRDRDgpEgCIIgiKCjrJIqYTCQYCQIgohkSDASBEEQBBF0bDabcL3BQEMRgiCISIau0gRBEARBBB2HwyFcbzTSUIQgCCKSoas0QRAEQRBBhwQjQRCRws6dOzBy5A3o1683nnnmiXAfTq2w2+2YO/fzkLyXOSTvQhAEQRBEXEOCkSCISOHjjz+EwWDA7NlzkZKSEu7DqRU//rgUb789FTfeeEvQ34sEI0EQBEEQQcfpFAtGKnpDEESoKSsrRfv2Z6BZs+bhPpRa43K5QvZeJBgJgiAIggg6DodTuJ4cRoIgQsl1112NvDx3/9elS7/DtGnv48SJPHz55ec4fPgQ6tWrh8GDh2HEiNthNBpx/PgxXH/9YNx11xgsWDAfiYmJ+OijOTAYDHjnnbewatVK1NTUoEOHM3HffQ/ijDM6yu+1du0azJz5AXbv3on09AwMHDgId999L0wmE06ePIH33/8/rF37F0pKipGdnSNvNxqNcDgcmD79Hfz00zIUFhagUaPGuOGGmzB06HX4/vtv8eqrLwAA+vTpjmnT3se553YP2mdGgpEgCIIgiKCjFZJKDiNBRD8H8gw
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from darts.models import NaiveSeasonal\n",
|
||
|
"\n",
|
||
|
"model = NaiveSeasonal(K=1)\n",
|
||
|
"model.fit(train_series)\n",
|
||
|
"\n",
|
||
|
"prediction = model.predict(len(test_series))\n",
|
||
|
"\n",
|
||
|
"# train_series.plot(label='actual')\n",
|
||
|
"test_series.plot(label='test')\n",
|
||
|
"prediction.plot(label='forecast', lw=1)\n",
|
||
|
"plt.legend()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 51,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.942698600Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<matplotlib.legend.Legend at 0x29743a9bb80>"
|
||
|
},
|
||
|
"execution_count": 51,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from darts.models import ExponentialSmoothing\n",
|
||
|
"\n",
|
||
|
"model = ExponentialSmoothing()\n",
|
||
|
"model.fit(train_series)\n",
|
||
|
"prediction_exp = model.predict(len(test_series))\n",
|
||
|
"\n",
|
||
|
"# train_series.plot(label='actual')\n",
|
||
|
"test_series.plot(label='actual')\n",
|
||
|
"prediction_exp.plot(label='forecast', lw=1)\n",
|
||
|
"\n",
|
||
|
"plt.legend()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 52,
|
||
|
"metadata": {
|
||
|
"ExecuteTime": {
|
||
|
"start_time": "2023-05-23T15:03:36.943698Z"
|
||
|
}
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<matplotlib.legend.Legend at 0x29751033c10>"
|
||
|
},
|
||
|
"execution_count": 52,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from darts.models import AutoARIMA\n",
|
||
|
"\n",
|
||
|
"model_aarima = AutoARIMA()\n",
|
||
|
"model_aarima.fit(train_series)\n",
|
||
|
"prediction_aarima = model_aarima.predict(len(test_series))\n",
|
||
|
"\n",
|
||
|
"# train_series.plot(label='actual')\n",
|
||
|
"test_series.plot(label='actual')\n",
|
||
|
"prediction_aarima.plot(label='forecast', lw=1)\n",
|
||
|
"\n",
|
||
|
"plt.legend()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 53,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"08:29:59 - cmdstanpy - INFO - Chain [1] start processing\n",
|
||
|
"08:29:59 - cmdstanpy - INFO - Chain [1] done processing\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<matplotlib.legend.Legend at 0x29750c80670>"
|
||
|
},
|
||
|
"execution_count": 53,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4wAAAGDCAYAAABgA55eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd5gTVdvG7/Rk+8LS+9IEBCkC+gkqoiKoFEVFBVQUQVFR7L0LLyoKVkRQUFFAERAVsSBFRaT33ssC20t6+f4IMzlTk+wm2ST7/K6Li2RmMpnNJDPnPvdTND6fzweCIAiCIAiCIAiCEKGt7gMgCIIgCIIgCIIg4hMSjARBEARBEARBEIQsJBgJgiAIgiAIgiAIWUgwEgRBEARBEARBELKQYCQIgiAIgiAIgiBkIcFIEARBEARBEARByEKCkSAIgiAIgiAIgpCFBCNBEARBEARBEAQhi766D6CynD1bVt2HIIvX64HVWoSUlGxotbrqPhwiCtA5rhnQeU5+6BwnP3SOkx86xzUDOs/Ro06d9KDbkMMYYXw+n+B/Ivmgc1wzoPOc/NA5Tn7oHCc/dI5rBnSeqxcSjARBEARBEARBEIQsJBgJgiAIgiAIgiAIWUgwEgRBEARBEARBELKQYCQIgiAIgiAIgiBkIcFIEARBEARBEARByEKCkSAIgiAIgiAIgpCFBCNBEARBEARBEAQhCwlGgiAIgiAIgiAIQhYSjARBEARBEARBEIQsJBgJgiAIgiAIgiAIWUgwEgRBEAQRM3w+H3w+X3UfBkEQBBEiJBgJgiAIgogJx44dRc+enXHNNX1gs9mq+3AIgiCIECDBSBAEQRBETBg//n4cPnwImzZtxIwZH1X34RAEQRAhEJZg3Lt3L+6//35cccUVuPrqq/H888+jsLAQADBx4kRcfPHF6N27N/9v4cKF/GuXLl2KwYMHo1evXhgxYgS2bt0a2b+EIAiCIIi4Zt26tfzjo0ePVuOREARBVI6SkmIsXbooovt8/fWX8MAD90Z0n5EkZMFot9vx4IMPolOnTvjll18wf/58lJSU4OWXXwYA7Nq1C88++yxWr17N/7vhhhsAABs2bMDkyZPx0ksvYcWKFejXrx8mTJgAu90enb+KIAiCIIi4w+l08o/NZlM1HglBEETl+OCDqVi27KfqPoyYErJgzMvLQ9u2bTF69GgYDAZkZWXhxhtvxObNm+F2u7F//360a9dO9rWLFi3C1Vdfjc6dO8NgMGD48OHIzMzE8uXLI/aHEARBEASROBiNJBgJgkg8amLRLn2oGzZv3hzTpk0TLFuxYgXat2+Pffv2weVy4eOPP8aWLVuQlpaGgQMHYuTIkdBqtThw4AAGDhwoeG1ubi727dtX6QP3ej1xecK8XrfgfyL5oHNcM6DznPzQOa5e9HodPJ7ofvZ0jpMfOsc1g0if50OHDuLTTz/G1q2bYbVaUa9efdxww00YOvQWAMB///2Lzz77FPv370VGRgauvro/7r57DCZPfp13F3v1uhArV67F+PH3oX79Bnj66Rf4/U+c+Ary8k5h6lR/rva2bVvw2WefYvfunXA6nWjcuAmGD78TV155NQDA5/MC8EX9mlhZQhaMYqZPn46VK1dixowZKCoqQrdu3TBs2DBMnDgRu3fvxhNPPAGtVouRI0fCarXCYrEIXm82m2G1Wit94FZrUaVfGwscjvLqPgQiytA5rhnQeU5+6BxXDzodYLMVx+S96BwnP3SOq4+ffvoJ77zzDioqKmL+3qmpqXjkkUcwYMCAkF9jt9vxyCPj0LlzZ7z11lvQ6/X45Zdf8N577+C881rB5XLhiScmYPDgwXj44Ydw5swZTJ48GR6PE6NH3w2rtRxnz57F888/D5utGB6PG263U3A9c7ud8HjcsNmKkZ+fj0cffQjXXXcdxo27D263G99++y0mTXoV7du3RnZ2tmD72JMddIuwBWN5eTlefvll7NmzBzNmzECrVq0AAN27d+e3Of/88zFs2DD8+uuvGDlyJCwWiyRf0W63Izs7+AEqkZKSHbcOo8NRDpMpDVptpfU4EcfQOa4Z0HlOfugcVy8pKemwWLKi+h50jpMfOsfVz6efzsKBAweq7f1nzpyFG2+8LeTtHY4i3HzzrRg06EakpqYCAEaPbo158+bhxIkz+Pfff3Deee0xfvwTAIA2bQCvV4eCgnzk5DRCSkoaTKYyNGqUCwDQ6fTQ642C65leb4ROp4fFkgWdrgJ33nkPhg27HVqtPxvwjjuysHz5cpw9W4KGDVsIto9HwvplHT9+HA899BAaNmyIOXPmICsrCwCwatUqnDlzBkOHDuW3dTqdMJn8+QktW7bEwYMHBfs6dOgQLrnkkkofuFarq/RrY4FWq4dORxeuZIbOcc2AznPyQ+e4evD5ELPPnc5x8kPnuPp48MGHMWnSaygvj6bL64PP54NGowGg4ZempaXhgQceDuvc165dBzfeeAt++2059u/fi+PHj2Hfvr38+oMH96N7956CffbpcyX/WKPRAtAw6zXQaLSC7dltmjRphuuvH4JFixbi8OGDOHbsKPbu3cNvq9PpZfYZX4R8VKWlpRg7diy6d++O559/nlfIAOD1evHOO++gcePG6NmzJ7Zt24ZvvvkGEyZMAAAMHDgQjz/+OK666ip07twZ8+fPR2FhIfr06RP5v4ggCIIgiLjH5XJV9yEQBBEBrr9+MK6/fnBU34ML1/Q7dlUTVYWFBRgz5i5kZmahV69L0a1bD7Rr1x433HAtAECv158TpqEjjnp0uwO5iEeOHMbYsaPQps156NGjJ3r1uhRZWdkYPfqOKv0dsSTkT3zJkiXIy8vDr7/+it9++02wbvXq1Xj88cfx5ptv4vTp06hduzbGjBnDxxP36NEDTz75JCZOnIgzZ84gNzcX06ZNQ2ZmZmT/GoIgCIIgEgKXyxl8I4IgiAizfPnPKCkpwddfL4Re75dCBw7sB+AXfs2b52LXrp2C18yfPxfLlv2IWbO+kohJg8GAigqhu3r8+DE+0vL77xegVq1amDr1Q379mjWrIv53RZOQBePw4cMxfPhwxfWDBw/G4MGDFdcPGDAgrIRUgiAIgiCSB/EMvMsVn9UACYJIburWrQ+73YY//vgVnTp1wdGjhzFt2hQA/oms224bgXvuGYkZMz5Cv34DcOLEccyZ8xluvPFmAIDFYkF+fj5OnjyBhg0boWPHCzB37hysWbMKLVrkYtmyH3Hw4H60a9fh3PvVw5kzp/HPP3+hRYtc7NmzC++++xYAYW/aeCY+A2UJgiAIgkgqHA6H4HmiDJQIgkgu+vTpiz17RuD9999FRUU5GjRoiOuuG4Q1a1Zh584dGDx4KCZOfBuffvox5s6dg1q1amPo0FswcuQoAED//tdh1ao/MWLEzZg3bzGGDbsdJ0+ewKuvPg+NRoMrrrgKN998G7Zt2wIAGDp0GI4cOYxXX30BLpcLTZo0wb333o9Zsz7Bzp3bcdFF/1edH0dIaHzxWGo0BM6eLavuQ5AlkjHWRHxC57hmQOc5+aFzHFsKCgrQrl0L/vmoUaMxadLbUX1POsfJD53jmgGd5+hRp0560G20QbcgCIIgCIKoIuXlwoleCkklCIJIDEgwEgRBEAQRdcQl9ysqyqhSKkEQRAJAgpEgCIIgiKgjFowLF36L7t07obi4qJqOiCAIgggFEowEQRAEQUSdigpp7YGTJ0/g7bf/Vw1HQxAEQYQKCUaCIAiCIKJORUWF7PJTp07F+EgIgiCIcCDBSBAEQRBE1BGHpHJotRrZ5QRBEER8QIKRIAiCIIioI66SyqHRkGAkCIKIZ0gwEgRBEAQRdWw2m+xyjYaGIgRBEPEMXaUJgiAIgog6Ho9HdrlWS0MRgiCIeIau0gRBEARBRB0SjARBxAt79uzGiBE3o0+fi/H8809V9+FUCrfbjXnzvorJe+lj8i4EQRAEQdRoSDASBBEvfP75p9BoNJgzZx5SU1Or+3Aqxa+/LsN7772DW265PervRYKRIAiCIIio4/XKC0YqekMQRKwpLy9DmzbnoUmTptV9KJXG5/PF7L1
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from darts.models import Prophet\n",
|
||
|
"\n",
|
||
|
"model_prophet = Prophet()\n",
|
||
|
"model_prophet.fit(train_series)\n",
|
||
|
"prediction_prophet = model_prophet.predict(len(test_series))\n",
|
||
|
"\n",
|
||
|
"# train_series.plot(label='actual')\n",
|
||
|
"test_series.plot(label='actual')\n",
|
||
|
"prediction_prophet.plot(label='forecast', lw=1)\n",
|
||
|
"\n",
|
||
|
"plt.legend()"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 47,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"ignoring user defined `output_chunk_length`. RNNModel uses a fixed `output_chunk_length=1`.\n",
|
||
|
"GPU available: False, used: False\n",
|
||
|
"TPU available: False, using: 0 TPU cores\n",
|
||
|
"IPU available: False, using: 0 IPUs\n",
|
||
|
"HPU available: False, using: 0 HPUs\n",
|
||
|
"\n",
|
||
|
" | Name | Type | Params\n",
|
||
|
"---------------------------------------------------\n",
|
||
|
"0 | criterion | MSELoss | 0 \n",
|
||
|
"1 | train_metrics | MetricCollection | 0 \n",
|
||
|
"2 | val_metrics | MetricCollection | 0 \n",
|
||
|
"3 | rnn | RNN | 700 \n",
|
||
|
"4 | V | Linear | 26 \n",
|
||
|
"---------------------------------------------------\n",
|
||
|
"726 Trainable params\n",
|
||
|
"0 Non-trainable params\n",
|
||
|
"726 Total params\n",
|
||
|
"0.003 Total estimated model params size (MB)\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "Training: 0it [00:00, ?it/s]",
|
||
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
"version_major": 2,
|
||
|
"version_minor": 0,
|
||
|
"model_id": "cc1c3dfa4a0b4391b764ce8438033d3b"
|
||
|
}
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"`Trainer.fit` stopped: `max_epochs=30` reached.\n",
|
||
|
"GPU available: False, used: False\n",
|
||
|
"TPU available: False, using: 0 TPU cores\n",
|
||
|
"IPU available: False, using: 0 IPUs\n",
|
||
|
"HPU available: False, using: 0 HPUs\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "Predicting: 0it [00:00, ?it/s]",
|
||
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
"version_major": 2,
|
||
|
"version_minor": 0,
|
||
|
"model_id": "0d33c4ac39e4480f9411222a7da44eca"
|
||
|
}
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<matplotlib.legend.Legend at 0x2974e9e0430>"
|
||
|
},
|
||
|
"execution_count": 47,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4wAAAGDCAYAAABgA55eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADZj0lEQVR4nOydd5gTVdvG75TdbLYv7NJ7VUBF6QoqoCKogB0VLCiCYv9QX8XOq/CiomIvoKKiICIgKmLBgooK0qX3Dttbkt2U7484k3NmzkyS3fQ8v+viYjIzSWYzycy5z/0Ug8fj8YAgCIIgCIIgCIIgFBijfQAEQRAEQRAEQRBEbEKCkSAIgiAIgiAIghBCgpEgCIIgCIIgCIIQQoKRIAiCIAiCIAiCEEKCkSAIgiAIgiAIghBCgpEgCIIgCIIgCIIQQoKRIAiCIAiCIAiCEEKCkSAIgiAIgiAIghBijvYB1JUTJyqifQhC3G4XqqtLkJ6eB6PRFO3DIcIAnePkgM5z4kPnOPGhc5z40DlODug8h4+Cgiy/+5DDGGI8Hg/3P5F40DlODug8Jz50jhMfOseJD53j5IDOc3QhwUgQBEEQBEEQBEEIIcFIEARBEARBEARBCCHBSBAEQRAEQRAEQQghwUgQBEEQBEEQBEEIIcFIEARBEARBEARBCCHBSBAEQRAEQRAEQQghwUgQBEEQBEEQBEEIIcFIEARBEARBEARBCCHBSBAEQRAEQRAEQQghwUgQBEEQBEEQBEEIIcFIEARBEETE8Hg88Hg80T4MgiAIIkBIMBIEQRAEEREOHNiPPn2648ILB8Jms0X7cAiCIIgAIMFIEARBEEREuPvu27F37x6sXfs33n779WgfDkEQBBEAQQnG7du34/bbb8egQYNwwQUX4NFHH0VxcTEAYOrUqejXrx8GDBgg/1u4cKH83KVLl2LkyJHo378/xowZgw0bNoT2LyEIgiAIIqb5889V8vL+/fujeCQEQRB1o6ysFEuXLgrpaz799BO4445bQ/qaoSRgwWi323HnnXfi1FNPxTfffIP58+ejrKwMTz75JABgy5YtmDx5Mn755Rf532WXXQYAWLNmDaZPn44nnngCK1aswJAhQ3DffffBbreH568iCIIgCCLmqKmpkZfT0ixRPBKCIIi68eqrL2HZsq+ifRgRJWDBePToUXTu3Bnjxo1DSkoKcnNzcfnll2PdunVwOp3YuXMnTj75ZOFzFy1ahAsuuADdu3dHSkoKRo8ejZycHCxfvjxkfwhBEARBEPFDaioJRoIg4o9kLNplDnTHNm3aYObMmdy6FStWoEuXLtixYwdqa2vxxhtvYP369cjMzMTw4cNx/fXXw2g0YteuXRg+fDj33Hbt2mHHjh11PnC32xWTJ8ztdnL/E4kHnePkgM5z4kPnOLqYzSa4XOH97OkcJz50jpODUJ/nPXt245133sCGDetQXV2Nxo2b4LLLrsQVV1wNAPjrrz/w7rvvYOfO7cjOzsYFFwzFzTePx/TpT8vuYv/+PfHTT6tw9923oUmTpnjoocfk15869SkcPXoEL73kzdXeuHE93n33HWzd+g9qamrQokVLjB59I8477wIAgMfjBuAJ+zWxrgQsGJW8+eab+Omnn/D222+jpKQEPXr0wKhRozB16lRs3boVDzzwAIxGI66//npUV1fDarVyz09LS0N1dXWdD7y6uqTOz40EDkdltA+BCDN0jpMDOs+JD53j6GAyATZbaUTei85x4kPnOHp89dVXeOGFF1BVVRXx987IyMC9996LYcOGBfwcu92Oe++diO7du+O5556D2WzGN998g5dffgEnndQBtbW1eOCB+zBy5Ejcc89dOH78OKZPnw6Xqwbjxt2M6upKnDhxAo8++ihstlK4XE44nTXc9czprIHL5YTNVorCwkL83//dhYsvvhgTJ94Gp9OJBQsWYNq0KejSpSPy8vK4/SNPnt89ghaMlZWVePLJJ7Ft2za8/fbb6NChAwCgV69e8j7dunXDqFGj8O233+L666+H1WpV5Sva7Xbk5fk/QC3S0/Ni1mF0OCphsWTCaKyzHidiGDrHyQGd58SHznF0SU/PgtWaG9b3oHOc+NA5jj7vvDMbu3btitr7z5o1G5dffm3A+zscJbjqqmswYsTlyMjIAACMG9cR8+bNw6FDx/HHH7/jpJO64O67HwAAdOoEuN0mFBUVIj+/OdLTM2GxVKB583YAAJPJDLM5lbuemc2pMJnMsFpzYTJV4cYbb8GoUdfBaPRmA95wQy6WL1+OEyfK0KxZW27/WCSoX9bBgwdx1113oVmzZpgzZw5yc3MBAD///DOOHz+OK664Qt63pqYGFos3P6F9+/bYvXs391p79uzBWWedVecDNxpNdX5uJDAazTCZ6MKVyNA5Tg7oPCc+dI6jg8eDiH3udI4THzrH0ePOO+/BtGn/RWVlOF1eDzweDwwGAwCDvDYzMxN33HFPUOe+YcMCXH751fjuu+XYuXM7Dh48gB07tsvbd+/eiV69+nCvOXDgefKywWAEYGC2G2AwGLn92X1atmyNSy65FIsWLcTevbtx4MB+bN++Td7XZDILXjO2CPioysvLMWHCBPTq1QuPPvqorJABwO1244UXXkCLFi3Qp08fbNy4EZ988gnuu+8+AMDw4cNx//334/zzz0f37t0xf/58FBcXY+DAgaH/iwiCIAiCiHlqa2ujfQgEQYSASy4ZiUsuGRnW95DCNb2OXf1EVXFxEcaPvwk5Obno3/9s9OjRGyef3AWXXXYRAMBsNv8rTANHGfXodPpyEfft24sJE8aiU6eT0Lt3H/TvfzZyc/MwbtwN9fo7IknAn/iSJUtw9OhRfPvtt/juu++4bb/88gvuv/9+PPvsszh27BgaNmyI8ePHy/HEvXv3xoMPPoipU6fi+PHjaNeuHWbOnImcnJzQ/jUEQRAEQcQFtbU1/nciCIIIMcuXf42ysjJ8/PFCmM1eKbRr104AXuHXpk07bNnyD/ec+fPnYtmyLzF79kcqMZmSkoKqKt5dPXjwgBxp+fnnn6JBgwZ46aXX5O0rV/4c8r8rnAQsGEePHo3Ro0drbh85ciRGjhypuX3YsGFBJaQSBEEQBJE4KGfga2tjsxogQRCJTaNGTWC32/DDD9/i1FNPx/79ezFz5gwA3omsa68dg1tuuR5vv/06hgwZhkOHDmLOnHdx+eVXAQCsVisKCwtx+PAhNGvWHKecchrmzp2DlSt/Rtu27bBs2ZfYvXsnTj6567/v1xjHjx/D77//irZt22Hbti148cXnAPC9aWOZ2AyUJQiCIAgioXA4HNzjeBkoEQSRWAwcOBjbto3BK6+8iKqqSjRt2gwXXzwCK1f+jH/+2YyRI6/A1KnP45133sDcuXPQoEFDXHHF1bj++rEAgKFDL8bPP/+IMWOuwrx5izFq1HU4fPgQpkx5FAaDAYMGnY+rrroWGzeuBwBcccUo7Nu3F1OmPIba2lq0bNkSt956O2bPfgv//LMJffueGc2PIyAMnlgsNRoAJ05URPsQhIQyxpqITegcJwd0nhMfOseRpaioCCef3FZ+PHbsOEyb9nxY35POceJD5zg5oPMcPgoKsvzuY/S7B0EQBEEQRD2prOQneikklSAIIj4gwUgQBEEQRNhRltyvqqqgSqkEQRBxAAlGgiAIgiDCjlIwLly4AL16nYrS0pIoHRFBEAQRCCQYCYIgCIIIO1VV6toDhw8fwvPP/y8KR0MQBEEECglGgiAIgiDCTlVVlXD9kSNHInwkBEEQRDCQYCQIgiAIIuwoQ1IljEaDcD1BEAQRG5BgJAiCIAgi7CirpEoYDCQYCYIgYhkSjARBEARBhB2bzSZcbzDQUIQgCCKWoas0QRAEQRBhx+VyCdcbjTQUIQiCiGXoKk0QBEEQRNghwUgQRKywbdtWjBlzFQYO7IdHH/1PtA+nTjidTsyb91FE3ssckXchCIIgCCKpIcFIEESs8N5778BgMGDOnHnIyMiI9uHUiW+/XYaXX34BV199XdjfiwQjQRAEQRBhx+0WC0YqekMQRKSprKxAp04noWX
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from darts.models import RNNModel, TCNModel, TransformerModel\n",
|
||
|
"\n",
|
||
|
"model_rnn = RNNModel( input_chunk_length=12, output_chunk_length=1, n_epochs=30, model_name='LSTM')\n",
|
||
|
"model_rnn.fit(train_series, verbose=True)\n",
|
||
|
"prediction_rnn = model_rnn.predict(len(test_series))\n",
|
||
|
"\n",
|
||
|
"# train_series.plot(label='actual')\n",
|
||
|
"test_series.plot(label='actual')\n",
|
||
|
"prediction_rnn.plot(label='forecast', lw=1)\n",
|
||
|
"\n",
|
||
|
"plt.legend()"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 54,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"GPU available: False, used: False\n",
|
||
|
"TPU available: False, using: 0 TPU cores\n",
|
||
|
"IPU available: False, using: 0 IPUs\n",
|
||
|
"HPU available: False, using: 0 HPUs\n",
|
||
|
"\n",
|
||
|
" | Name | Type | Params\n",
|
||
|
"----------------------------------------------------\n",
|
||
|
"0 | criterion | MSELoss | 0 \n",
|
||
|
"1 | train_metrics | MetricCollection | 0 \n",
|
||
|
"2 | val_metrics | MetricCollection | 0 \n",
|
||
|
"3 | dropout | MonteCarloDropout | 0 \n",
|
||
|
"4 | res_blocks | ModuleList | 92 \n",
|
||
|
"----------------------------------------------------\n",
|
||
|
"92 Trainable params\n",
|
||
|
"0 Non-trainable params\n",
|
||
|
"92 Total params\n",
|
||
|
"0.000 Total estimated model params size (MB)\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "Training: 0it [00:00, ?it/s]",
|
||
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
"version_major": 2,
|
||
|
"version_minor": 0,
|
||
|
"model_id": "ccf9a638feca4055af6d809d4d8d85d7"
|
||
|
}
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"`Trainer.fit` stopped: `max_epochs=30` reached.\n",
|
||
|
"GPU available: False, used: False\n",
|
||
|
"TPU available: False, using: 0 TPU cores\n",
|
||
|
"IPU available: False, using: 0 IPUs\n",
|
||
|
"HPU available: False, using: 0 HPUs\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "Predicting: 0it [00:00, ?it/s]",
|
||
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
"version_major": 2,
|
||
|
"version_minor": 0,
|
||
|
"model_id": "27233ab59f0f42ec8ed6e5050ff60d47"
|
||
|
}
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<matplotlib.legend.Legend at 0x29751033bb0>"
|
||
|
},
|
||
|
"execution_count": 54,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA4wAAAGDCAYAAABgA55eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADbU0lEQVR4nOydd5gTVdvG75TdJNt32aX3KkUE6QoqoiKogB0VUFEERUURe6/woYLiaxdUVBRQRERFLFiwIUiX3tsC21t2synfH3Em58ycmSS7STbJPr/r4iKZmUxmM8nMuc/9FIPH4/GAIAiCIAiCIAiCIBQY6/oACIIgCIIgCIIgiOiEBCNBEARBEARBEAQhhAQjQRAEQRAEQRAEIYQEI0EQBEEQBEEQBCGEBCNBEARBEARBEAQhhAQjQRAEQRAEQRAEIYQEI0EQBEEQBEEQBCGEBCNBEARBEARBEAQhxFzXB1BTTp4sretDEOJ2u1BRUYikpEwYjaa6PhwiDNA5rh/QeY5/6BzHP3SO4x86x/UDOs/hIycn1e825DCGGI/Hw/1PxB90jusHdJ7jHzrH8Q+d4/iHznH9gM5z3UKCkSAIgiAIgiAIghBCgpEgCIIgCIIgCIIQQoKRIAiCIAiCIAiCEEKCkSAIgiAIgiAIghBCgpEgCIIgCIIgCIIQQoKRIAiCIAiCIAiCEEKCkSAIgiAIgiAIghBCgpEgCIIgCIIgCIIQQoKRIAiCIAiCIAiCEEKCkSAIgiAIgiAIghBCgpEgCIIgiIjh8Xjg8Xjq+jAIgiCIACHBSBAEQRBERDh06CD69euBCy8cDLvdXteHQxAEQQQACUaCIAiCICLClCm3Yf/+fVi//h+8/fbrdX04BEEQRAAEJRh37tyJ2267Deeeey4uuOACPProoygoKAAATJ8+HQMGDMCgQYPkf0uWLJFfu3z5cowaNQoDBw7E2LFjsWnTptD+JQRBEARBRDVr1vwpPz548GAdHglBEETNKC4uwvLlS0O6z2effQK3335LSPcZSgIWjJWVlbjjjjvQvXt3fPvtt1i0aBGKi4vx5JNPAgC2bduGhx9+GL/++qv877LLLgMArFu3DjNnzsQTTzyBVatWYejQoZg6dSoqKyvD81cRBEEQBBF1OBwO+bHVaqnDIyEIgqgZr776Mlas+LquDyOiBCwYc3Nz0alTJ0yYMAEJCQnIyMjA5Zdfjg0bNsDpdGL37t3o3Lmz8LVLly7FBRdcgB49eiAhIQFjxoxBeno6Vq5cGbI/hCAIgiCI2CExkQQjQRCxR30s2mUOdMPWrVtjzpw53LJVq1ahS5cu2LVrF6qrq/HGG29g48aNSElJwYgRIzBu3DgYjUbs2bMHI0aM4F7btm1b7Nq1q8YH7na7ovKEud1O7n8i/qBzXD+g8xz/0DmuW8xmE1yu8H72dI7jHzrH9YNQn+d9+/binXfewKZNG1BRUYFGjRrjssuuxBVXXA0A+Pvvv/Duu+9g9+6dSEtLwwUXDMNNN03EzJnPyu7iwIG98fPPf2LKlFvRuHETPPjgY/L+p09/Crm5x/Dyy95c7c2bN+Ldd9/B9u3/wuFwoHnzFhgz5gacd94FAACPxw3AE/ZrYk0JWDAqefPNN/Hzzz/j7bffRmFhIXr16oXRo0dj+vTp2L59O+677z4YjUaMGzcOFRUVsNls3OutVisqKipqfOAVFYU1fm0kqKoqq+tDIMIMneP6AZ3n+IfOcd1gMgF2e1FE3ovOcfxD57ju+PrrrzF79myUl5dH/L2Tk5Nx9913Y/jw4QG/prKyEnffPRk9evTACy+8ALPZjG+//RavvDIbp5zSHtXV1bjvvqkYNWoU7rrrTpw4cQIzZ86Ey+XAhAk3oaKiDCdPnsSjjz4Ku70ILpcTTqeDu545nQ64XE7Y7UXIy8vDPffciYsvvhiTJ98Kp9OJTz/9FDNmPI0uXTogMzOT2z7yZPrdImjBWFZWhieffBI7duzA22+/jfbt2wMA+vTpI2/TrVs3jB49Gt999x3GjRsHm82mylesrKxEZqb/A9QiKSkzah3GqqoyWCwpMBprrMeJKIbOcf2AznP8Q+e4bklKSoXNlhHW96BzHP/QOa573nlnHvbs2VNn7z937jxcfvm1AW9fVVWIq666BiNHXo7k5GQAwIQJHbBw4UIcOXICf/31B045pQumTLkPANCxI+B2m5Cfn4fs7GZISkqBxVKKZs3aAgBMJjPM5kTuemY2J8JkMsNmy4DJVI4bbrgZo0dfB6PRmw14/fUZWLlyJU6eLEbTpm247aORoH5Zhw8fxp133ommTZti/vz5yMjIAAD88ssvOHHiBK644gp5W4fDAYvFm5/Qrl077N27l9vXvn37cOaZZ9b4wI1GU41fGwmMRjNMJrpwxTN0jusHdJ7jHzrHdYPHg4h97nSO4x86x3XHHXfchRkznkFZWThdXg88Hg8MBgMAg7w0JSUFt99+V1DnvkGDHFx++dX4/vuV2L17Jw4fPoRdu3bK6/fu3Y0+ffpx+xw8+Dz5scFgBGBg1htgMBi57dltWrRohUsuuRRLly7B/v17cejQQezcuUPe1mQyC/YZXQR8VCUlJZg0aRL69OmDRx99VFbIAOB2uzF79mw0b94c/fr1w+bNm/HJJ59g6tSpAIARI0bg3nvvxfnnn48ePXpg0aJFKCgowODBg0P/FxEEQRAEEfVUV1fX9SEQBBECLrlkFC65ZFRY30MK1/Q6drUTVQUF+Zg48Uakp2dg4MCz0KtXX3Tu3AWXXXYRAMBsNv8nTANHGfXodPpyEQ8c2I9Jk8ajY8dT0LdvPwwceBYyMjIxYcL1tfo7IknAn/iyZcuQm5uL7777Dt9//z237tdff8W9996L559/HsePH0eDBg0wceJEOZ64b9++uP/++zF9+nScOHECbdu2xZw5c5Cenh7av4YgCIIgiJigutrhfyOCIIgQs3LlNyguLsbHHy+B2eyVQnv27AbgFX6tW7fFtm3/cq9ZtGgBVqz4CvPmfaQSkwkJCSgv593Vw4cPyZGWn3++GFlZWXj55dfk9atX/xLyvyucBCwYx4wZgzFjxmiuHzVqFEaNGqW5fvjw4UElpBIEQRAEET8oZ+Crq6OzGiBBEPFNw4aNUVlpx48/fofu3Xvi4MH9mDNnFgDvRNa1147FzTePw9tvv46hQ4fjyJHDmD//XVx++VUAAJvNhry8PBw9egRNmzbDqaeehgUL5mP16l/Qpk1brFjxFfbu3Y3Onbv+936NcOLEcfzxx29o06YtduzYhpdeegEA35s2monOQFmCIAiCIOKKqqoq7nmsDJQIgogvBg8egh07xuJ//3sJ5eVlaNKkKS6+eCRWr/4F//67FaNGXYHp01/EO++8gQUL5iMrqwGuuOJqjBs3HgAwbNjF+OWXnzB27FVYuPALjB59HY4ePYKnn34UBoMB5557Pq666lps3rwRAHDFFaNx4MB+PP30Y6iurkaLFi1wyy23Yd68t/Dvv1vQv/8ZdflxBITBE42lRgPg5MnSuj4EIaGMsSaiEzrH9QM6z/EPnePIkp+fj86d28jPx4+fgBkzXgzre9I5jn/oHNcP6DyHj5ycVL/bGP1uQRAEQRAEUUvKyviJXgpJJQiCiA1IMBIEQRAEEXaUJffLy0upUipBEEQMQIKRIAiCIIiwoxSMS5Z8ij59uqOoqLCOjoggCIIIBBKMBEEQBEGEnfJyde2Bo0eP4MUX/68OjoYgCIIIFBKMBEEQBEGEnfLycuHyY8eORfhICIIgiGAgwUgQBEEQRNhRhqRKGI0G4XKCIAgiOiDBSBAEQRBE2FFWSZUwGEgwEgRBRDMkGAmCIAiCCDt2u1243GCgoQhBEEQ0Q1dpgiAIgiDCjsvlEi43GmkoQhAEEc3QVZogCIIgiLBDgpEgiGhhx47tGDv2KgwePACPPvpAXR9OjXA6nVi48KOIvJc5Iu9CEARBEES9hgQjQRDRwnvvvQODwYD58xciOTm5rg+nRnz33Qq88spsXH31dWF/LxKMBEEQBEGEHbdbLBip6A1BEJGmrKwUHTueghY
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"model_tcn = TCNModel(input_chunk_length=12, output_chunk_length=1, n_epochs=30)\n",
|
||
|
"model_tcn.fit(train_series, verbose=True)\n",
|
||
|
"prediction_tcn = model_tcn.predict(len(test_series))\n",
|
||
|
"\n",
|
||
|
"# train_series.plot(label='actual')\n",
|
||
|
"test_series.plot(label='actual')\n",
|
||
|
"prediction_tcn.plot(label='forecast', lw=1)\n",
|
||
|
"\n",
|
||
|
"plt.legend()"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 55,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"GPU available: False, used: False\n",
|
||
|
"TPU available: False, using: 0 TPU cores\n",
|
||
|
"IPU available: False, using: 0 IPUs\n",
|
||
|
"HPU available: False, using: 0 HPUs\n",
|
||
|
"\n",
|
||
|
" | Name | Type | Params\n",
|
||
|
"------------------------------------------------------------\n",
|
||
|
"0 | criterion | MSELoss | 0 \n",
|
||
|
"1 | train_metrics | MetricCollection | 0 \n",
|
||
|
"2 | val_metrics | MetricCollection | 0 \n",
|
||
|
"3 | encoder | Linear | 128 \n",
|
||
|
"4 | positional_encoding | _PositionalEncoding | 0 \n",
|
||
|
"5 | transformer | Transformer | 548 K \n",
|
||
|
"6 | decoder | Linear | 65 \n",
|
||
|
"------------------------------------------------------------\n",
|
||
|
"548 K Trainable params\n",
|
||
|
"0 Non-trainable params\n",
|
||
|
"548 K Total params\n",
|
||
|
"2.195 Total estimated model params size (MB)\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "Training: 0it [00:00, ?it/s]",
|
||
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
"version_major": 2,
|
||
|
"version_minor": 0,
|
||
|
"model_id": "57dee33fb73d4c6cb57db370801c05c5"
|
||
|
}
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"name": "stderr",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"`Trainer.fit` stopped: `max_epochs=30` reached.\n",
|
||
|
"GPU available: False, used: False\n",
|
||
|
"TPU available: False, using: 0 TPU cores\n",
|
||
|
"IPU available: False, using: 0 IPUs\n",
|
||
|
"HPU available: False, using: 0 HPUs\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "Predicting: 0it [00:00, ?it/s]",
|
||
|
"application/vnd.jupyter.widget-view+json": {
|
||
|
"version_major": 2,
|
||
|
"version_minor": 0,
|
||
|
"model_id": "869aab54c27148eea7571d676d9913a1"
|
||
|
}
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<matplotlib.legend.Legend at 0x29750ece5f0>"
|
||
|
},
|
||
|
"execution_count": 55,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": "<Figure size 1100x400 with 1 Axes>",
|
||
|
"image/png": "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
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"model_transformer = TransformerModel(input_chunk_length=12, output_chunk_length=1, n_epochs=30)\n",
|
||
|
"model_transformer.fit(train_series, verbose=True)\n",
|
||
|
"prediction_transformer = model_transformer.predict(len(test_series))\n",
|
||
|
"\n",
|
||
|
"# train_series.plot(label='actual')\n",
|
||
|
"test_series.plot(label='actual')\n",
|
||
|
"prediction_transformer.plot(label='forecast', lw=1)\n",
|
||
|
"\n",
|
||
|
"plt.legend()"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"source": [
|
||
|
"## Evaluation"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 62,
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Prophet\n",
|
||
|
"MAPE: 195.49%\n",
|
||
|
"MASE: 4.25\n",
|
||
|
"R^2: -0.62\n",
|
||
|
"AutoARIMA\n",
|
||
|
"MAPE: 94.51%\n",
|
||
|
"MASE: 3.76\n",
|
||
|
"R^2: -0.16\n",
|
||
|
"Exponential Smoothing\n",
|
||
|
"MAPE: 558.50%\n",
|
||
|
"MASE: 15.00\n",
|
||
|
"R^2: -14.13\n",
|
||
|
"RNN\n",
|
||
|
"MAPE: 106.90%\n",
|
||
|
"MASE: 3.83\n",
|
||
|
"R^2: -0.23\n",
|
||
|
"TCN\n",
|
||
|
"MAPE: 207.13%\n",
|
||
|
"MASE: 4.29\n",
|
||
|
"R^2: -0.67\n",
|
||
|
"Transformer\n",
|
||
|
"MAPE: 94.76%\n",
|
||
|
"MASE: 3.77\n",
|
||
|
"R^2: -0.16\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from darts.metrics import mape, mase\n",
|
||
|
"\n",
|
||
|
"print('Prophet')\n",
|
||
|
"print('MAPE: {:.2f}%'.format(mape(prediction_prophet, test_series)))\n",
|
||
|
"print('MASE: {:.2f}'.format(mase(prediction_prophet, test_series, train_series)))\n",
|
||
|
"print('R^2: {:.2f}'.format(r2_score(test_series.values(), prediction_prophet.values())))\n",
|
||
|
"\n",
|
||
|
"print('AutoARIMA')\n",
|
||
|
"print('MAPE: {:.2f}%'.format(mape(prediction_aarima, test_series)))\n",
|
||
|
"print('MASE: {:.2f}'.format(mase(prediction_aarima, test_series, train_series)))\n",
|
||
|
"print('R^2: {:.2f}'.format(r2_score(test_series.values(), prediction_aarima.values())))\n",
|
||
|
"\n",
|
||
|
"print('Exponential Smoothing')\n",
|
||
|
"print('MAPE: {:.2f}%'.format(mape(prediction_exp, test_series)))\n",
|
||
|
"print('MASE: {:.2f}'.format(mase(prediction_exp, test_series, train_series)))\n",
|
||
|
"print('R^2: {:.2f}'.format(r2_score(test_series.values(), prediction_exp.values())))\n",
|
||
|
"\n",
|
||
|
"print('RNN')\n",
|
||
|
"print('MAPE: {:.2f}%'.format(mape(prediction_rnn, test_series)))\n",
|
||
|
"print('MASE: {:.2f}'.format(mase(prediction_rnn, test_series, train_series)))\n",
|
||
|
"print('R^2: {:.2f}'.format(r2_score(test_series.values(), prediction_rnn.values())))\n",
|
||
|
"\n",
|
||
|
"print('TCN')\n",
|
||
|
"print('MAPE: {:.2f}%'.format(mape(prediction_tcn, test_series)))\n",
|
||
|
"print('MASE: {:.2f}'.format(mase(prediction_tcn, test_series, train_series)))\n",
|
||
|
"print('R^2: {:.2f}'.format(r2_score(test_series.values(), prediction_tcn.values())))\n",
|
||
|
"\n",
|
||
|
"print('Transformer')\n",
|
||
|
"print('MAPE: {:.2f}%'.format(mape(prediction_transformer, test_series)))\n",
|
||
|
"print('MASE: {:.2f}'.format(mase(prediction_transformer, test_series, train_series)))\n",
|
||
|
"print('R^2: {:.2f}'.format(r2_score(test_series.values(), prediction_transformer.values())))"
|
||
|
],
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
}
|
||
|
}
|
||
|
],
|
||
|
"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.10.11"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 1
|
||
|
}
|