pyFTSex/tutorial/pyFTS/developer/Chen - ConventionalFTS.ipynb

1107 lines
786 KiB
Plaintext
Raw Normal View History

2024-08-15 12:15:32 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "view-in-github"
},
"source": [
"<a href=\"https://colab.research.google.com/github/PYFTS/notebooks/blob/master/Chen%20-%20ConventionalFTS.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "x2LMLww79mVt"
},
"source": [
"# First Order Weighted Fuzzy Time Series by Yu(2005)\n",
"\n",
"H.-K. Yu, “Weighted fuzzy time series models for TAIEX forecasting,” \n",
"Phys. A Stat. Mech. its Appl., vol. 349, no. 3, pp. 609624, 2005."
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Jx-dFMeC9mVz"
},
"source": [
"## Environment Setup"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "H-laCR5H9mV1"
},
"source": [
"### Library install/update"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 263
},
"colab_type": "code",
"id": "ftD40EBQ9mV4",
"outputId": "5cc34a26-3afe-4e2e-fda1-576ac545c453"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting git+https://github.com/PYFTS/pyFTS\n",
" Cloning https://github.com/PYFTS/pyFTS to /tmp/pip-req-build-dqestlqc\n",
" Running command git clone -q https://github.com/PYFTS/pyFTS /tmp/pip-req-build-dqestlqc\n",
"Building wheels for collected packages: pyFTS\n",
" Building wheel for pyFTS (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for pyFTS: filename=pyFTS-1.6-cp36-none-any.whl size=197025 sha256=6e839f074268e83537bba8d25fc74ba6934b60ed662a0b17a16c6bfb64c73f7a\n",
" Stored in directory: /tmp/pip-ephem-wheel-cache-appy12pd/wheels/e7/32/a9/230470113df5a73242a5a6d05671cb646db97abf14bbce2644\n",
"Successfully built pyFTS\n",
"Installing collected packages: pyFTS\n",
" Found existing installation: pyFTS 1.6\n",
" Uninstalling pyFTS-1.6:\n",
" Successfully uninstalled pyFTS-1.6\n",
"Successfully installed pyFTS-1.6\n"
]
}
],
"source": [
"!pip3 install -U git+https://github.com/PYFTS/pyFTS\n",
"#!pip3 install dispy"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "nxGKQF819mWA"
},
"source": [
"### External libraries import"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"colab_type": "code",
"id": "3UICJE4q9mWD",
"outputId": "b8823a18-caa6-4305-d835-35a89c1049bb"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pylab as plt\n",
"import seaborn as sns\n",
"\n",
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "DRj_c1Af9mWJ"
},
"source": [
"### Common pyFTS imports "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "ROHnRPQr9mWL"
},
"outputs": [],
"source": [
"from pyFTS.common import Util as cUtil\n",
"from pyFTS.benchmarks import benchmarks as bchmk, Util as bUtil\n",
"from pyFTS.partitioners import Util as pUtil\n",
"\n",
"from pyFTS.models import chen\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "noQuGEh79mWQ"
},
"source": [
"## Common data transformations"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Rf1kbFSn9mWS"
},
"outputs": [],
"source": [
"from pyFTS.common import Transformations\n",
"\n",
"tdiff = Transformations.Differential(1)\n",
"\n",
"boxcox = Transformations.BoxCox(0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Xom5aDUR9mWY"
},
"source": [
"## Datasets"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "4Tf4MrAk9mWa"
},
"source": [
"### Data Loading"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "QgyjvurE9mWb"
},
"outputs": [],
"source": [
"from pyFTS.data import TAIEX, NASDAQ, SP500\n",
"\n",
"dataset_names = [\"TAIEX\", \"SP500\",\"NASDAQ\"]\n",
"\n",
"def get_dataset(name):\n",
" if dataset_name == \"TAIEX\":\n",
" return TAIEX.get_data()\n",
" elif dataset_name == \"SP500\":\n",
" return SP500.get_data()[11500:16000]\n",
" elif dataset_name == \"NASDAQ\":\n",
" return NASDAQ.get_data()\n",
"\n",
"\n",
"train_split = 2000\n",
"test_length = 200"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "qshydqlk9mWg"
},
"source": [
"### Visualization"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 336
},
"colab_type": "code",
"id": "5eedBSif9mWi",
"outputId": "0678c35a-3e3a-47f2-8549-d0904b2e63db"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x360 with 6 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(nrows=2, ncols=3, figsize=[10,5])\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" dataset = get_dataset(dataset_name)\n",
" dataset_diff = tdiff.apply(dataset)\n",
"\n",
" ax[0][count].plot(dataset)\n",
" ax[1][count].plot(dataset_diff)\n",
" ax[0][count].set_title(dataset_name)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "T3f6SyW99mWn"
},
"source": [
"### Statistics"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 143
},
"colab_type": "code",
"id": "jE-HY1zx9mWo",
"outputId": "c16e937b-b56b-492c-8f7b-9bf4a9663198"
},
"outputs": [
{
"data": {
"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>Dataset</th>\n",
" <th>ADF Statistic</th>\n",
" <th>p-value</th>\n",
" <th>Cr. Val. 1%</th>\n",
" <th>Cr. Val. 5%</th>\n",
" <th>Cr. Val. 10%</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>TAIEX</td>\n",
" <td>-2.656728</td>\n",
" <td>0.081830</td>\n",
" <td>-3.431601</td>\n",
" <td>-2.862093</td>\n",
" <td>-2.567064</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>SP500</td>\n",
" <td>-1.747171</td>\n",
" <td>0.406987</td>\n",
" <td>-3.431811</td>\n",
" <td>-2.862186</td>\n",
" <td>-2.567114</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>NASDAQ</td>\n",
" <td>0.476224</td>\n",
" <td>0.984132</td>\n",
" <td>-3.432022</td>\n",
" <td>-2.862279</td>\n",
" <td>-2.567163</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Dataset ADF Statistic p-value Cr. Val. 1% Cr. Val. 5% Cr. Val. 10%\n",
"0 TAIEX -2.656728 0.081830 -3.431601 -2.862093 -2.567064\n",
"1 SP500 -1.747171 0.406987 -3.431811 -2.862186 -2.567114\n",
"2 NASDAQ 0.476224 0.984132 -3.432022 -2.862279 -2.567163"
]
},
"execution_count": 7,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"from statsmodels.tsa.stattools import adfuller\n",
"\n",
"rows =[]\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" row = [dataset_name]\n",
" dataset = get_dataset(dataset_name)\n",
" result = adfuller(dataset)\n",
" row.extend([result[0],result[1]])\n",
" row.extend([value for key, value in result[4].items()])\n",
" rows.append(row)\n",
" \n",
"pd.DataFrame(rows,columns=['Dataset','ADF Statistic','p-value','Cr. Val. 1%','Cr. Val. 5%','Cr. Val. 10%'])\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "rU7VPjD_9mWt"
},
"source": [
"## Partitioning\n",
"\n",
"Наилучшее количество разделов Вселенной Дискурса является задачей оптимизации. Чтобы узнать больше о схемах секционирования, просмотрите блокнот Partitioners. Чтобы узнать больше о сравнительном тестировании, загляните в блокнот «Бенчмарки»."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "0tu0-8Xv9mWv"
},
"outputs": [],
"source": [
"from pyFTS.partitioners import Grid, Util as pUtil\n",
"from pyFTS.benchmarks import benchmarks as bchmk\n",
"from pyFTS.models import chen\n",
"\n",
"tag = 'chen_partitioning'\n",
"_type = 'point'\n",
"\n",
"for dataset_name in dataset_names:\n",
" dataset = get_dataset(dataset_name)\n",
"\n",
" bchmk.sliding_window_benchmarks(dataset, 1000, train=0.8, inc=0.2,\n",
" methods=[chen.ConventionalFTS],\n",
" benchmark_models=False,\n",
" transformations=[None],\n",
" partitions=np.arange(10,100,2), \n",
" progress=False, type=_type,\n",
" file=\"benchmarks.db\", dataset=dataset_name, tag=tag)\n",
"\n",
" bchmk.sliding_window_benchmarks(dataset, 1000, train=0.8, inc=0.2,\n",
" methods=[chen.ConventionalFTS],\n",
" benchmark_models=False,\n",
" transformations=[tdiff],\n",
" partitions=np.arange(3,30,1), \n",
" progress=False, type=_type,\n",
" file=\"benchmarks.db\", dataset=dataset_name, tag=tag)\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 475
},
"colab_type": "code",
"id": "pbMJ7sSe9mW0",
"outputId": "182effbc-a2d1-4f07-b43e-ddc25c00f7a5"
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 0, 'Number of partitions of the UoD')"
]
},
"execution_count": 9,
"metadata": {
"tags": []
},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1080x504 with 2 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"from pyFTS.benchmarks import Util as bUtil\n",
"\n",
"df1 = bUtil.get_dataframe_from_bd(\"benchmarks.db\",\n",
" \"tag = 'chen_partitioning' and measure = 'rmse'and transformation is null\")\n",
"\n",
"df2 = bUtil.get_dataframe_from_bd(\"benchmarks.db\",\n",
" \"tag = 'chen_partitioning' and measure = 'rmse' and transformation is not null\")\n",
"\n",
"fig, ax = plt.subplots(nrows=2, ncols=1, figsize=[15,7])\n",
"\n",
"g1 = sns.boxplot(x='Partitions', y='Value', hue='Dataset', data=df1, showfliers=False, ax=ax[0], \n",
" palette=\"Set3\")\n",
"box = g1.get_position()\n",
"g1.set_position([box.x0, box.y0, box.width * 0.85, box.height]) \n",
"g1.legend(loc='right', bbox_to_anchor=(1.15, 0.5), ncol=1)\n",
"ax[0].set_title(\"Original data\")\n",
"ax[0].set_ylabel(\"RMSE\")\n",
"ax[0].set_xlabel(\"\")\n",
"\n",
"g2 = sns.boxplot(x='Partitions', y='Value', hue='Dataset', data=df2, showfliers=False, ax=ax[1], \n",
" palette=\"Set3\")\n",
"box = g2.get_position()\n",
"g2.set_position([box.x0, box.y0, box.width * 0.85, box.height]) \n",
"g2.legend(loc='right', bbox_to_anchor=(1.15, 0.5), ncol=1)\n",
"ax[1].set_title(\"Differentiated data\")\n",
"ax[1].set_ylabel(\"RMSE\")\n",
"ax[1].set_xlabel(\"Number of partitions of the UoD\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "xd0_sbJN9mW3"
},
"source": [
"### Comparing the partitioning schemas"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 367
},
"colab_type": "code",
"id": "UALZRP2_9mW5",
"outputId": "4159a800-b252-4d41-869d-c605522913c5"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x360 with 6 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"from pyFTS.partitioners import Grid, Util as pUtil\n",
"\n",
"fig, ax = plt.subplots(nrows=2, ncols=3, figsize=[20,5])\n",
"\n",
"\n",
"partitioners = {}\n",
"partitioners_diff = {}\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" dataset = get_dataset(dataset_name)\n",
"\n",
" partitioner = Grid.GridPartitioner(data=dataset, npart=30)\n",
" partitioners[dataset_name] = partitioner\n",
" partitioner_diff = Grid.GridPartitioner(data=dataset, npart=10, transformation=tdiff)\n",
" partitioners_diff[dataset_name] = partitioner_diff\n",
"\n",
" pUtil.plot_sets(dataset, [partitioner.sets], titles=[dataset_name], axis=ax[0][count])\n",
" pUtil.plot_sets(dataset, [partitioner_diff.sets], titles=[''], axis=ax[1][count])"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "emVoyADD9mW-"
},
"source": [
"## Fitting models"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "9cmdELOH9mW_"
},
"source": [
"### With original data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "9_EzXhLN9mXA"
},
"outputs": [],
"source": [
"for count,dataset_name in enumerate(dataset_names):\n",
" dataset = get_dataset(dataset_name)\n",
"\n",
" model1 = chen.ConventionalFTS(partitioner=partitioners[dataset_name])\n",
" model1.name=dataset_name\n",
" model1.fit(dataset[:train_split], save_model=True, file_path='model1'+dataset_name, order=1)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "V4OHNIRj9mXF"
},
"source": [
"### With transformed data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "jZk-tH-q9mXG"
},
"outputs": [],
"source": [
"for count,dataset_name in enumerate(dataset_names):\n",
" dataset = get_dataset(dataset_name)\n",
"\n",
" model2 = chen.ConventionalFTS(partitioner=partitioners_diff[dataset_name])\n",
" model2.name=dataset_name\n",
" model2.append_transformation(tdiff)\n",
" model2.fit(dataset[:train_split], save_model=True, file_path='model2'+dataset_name, order=1)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Z4YheFdX9mXL"
},
"source": [
"## Predicting with the models"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 749
},
"colab_type": "code",
"id": "rHL6JlyL9mXM",
"outputId": "002a2565-e726-41ef-85c0-a3d5a8cb0592"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x720 with 3 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(nrows=3, ncols=1, figsize=[20,10])\n",
"\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" dataset = get_dataset(dataset_name)\n",
" \n",
" ax[count].plot(dataset[train_split:train_split+200])\n",
"\n",
" model1 = cUtil.load_obj('model1'+dataset_name)\n",
"\n",
" forecasts = model1.predict(dataset[train_split:train_split+200])\n",
" \n",
" ax[count].plot(forecasts)\n",
" \n",
" ax[count].set_title(dataset_name)\n",
" \n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 143
},
"colab_type": "code",
"id": "5GMB4jPS9mXP",
"outputId": "be4c53cb-3351-44c7-c0a3-954231b91796"
},
"outputs": [
{
"data": {
"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>Dataset</th>\n",
" <th>RMSE</th>\n",
" <th>SMAPE</th>\n",
" <th>Theil's U</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>TAIEX</td>\n",
" <td>102.65</td>\n",
" <td>1.76</td>\n",
" <td>1.56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>SP500</td>\n",
" <td>14.49</td>\n",
" <td>1.14</td>\n",
" <td>2.60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>NASDAQ</td>\n",
" <td>48.39</td>\n",
" <td>2.36</td>\n",
" <td>2.02</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Dataset RMSE SMAPE Theil's U\n",
"0 TAIEX 102.65 1.76 1.56\n",
"1 SP500 14.49 1.14 2.60\n",
"2 NASDAQ 48.39 2.36 2.02"
]
},
"execution_count": 14,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"from pyFTS.benchmarks import Measures\n",
"\n",
"rows = []\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" row = [dataset_name]\n",
" \n",
" dataset = get_dataset(dataset_name)\n",
" \n",
" test = dataset[train_split:train_split+200]\n",
"\n",
" model1 = cUtil.load_obj('model1'+dataset_name)\n",
" \n",
" row.extend(Measures.get_point_statistics(test, model1))\n",
" \n",
" rows.append(row)\n",
" \n",
" \n",
"pd.DataFrame(rows,columns=[\"Dataset\",\"RMSE\",\"SMAPE\",\"Theil's U\"])\n",
" \n",
" \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 749
},
"colab_type": "code",
"id": "UFuHi-j49mXV",
"outputId": "c187966e-a1af-4b7c-c97a-818225d4c299"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZgAAALICAYAAADyhJW9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd0VVX6xvHvTieQBAihBULvHUJHBFSkY0UElKLiqFjGGUexzPzGMo46YsWCIgqKoFJEQJp0pCX0XgIkhJYCCenl7t8fJ0gQlAAJSeD5rHVXkn32Oec9yNLrk33fbay1iIiIiIiIiIiIiIhcKrfCLkBEREREREREREREiicFzCIiIiIiIiIiIiJyWRQwi4iIiIiIiIiIiMhlUcAsIiIiIiIiIiIiIpdFAbOIiIiIiIiIiIiIXBYFzCIiIiIiIiIiIiJyWRQwi4iIiIiIiIiIiMhlUcAsIiIiIvI7xpikXC+XMSY118+Dc80bZoyxxph7fnd+F2PM4Vw/LzXGpP3uuj/lHOtrjDlmjCmba35/Y0y0MSbgajyviIiIiMjlUsAsIiIiIvI71tpSZ15AJNA319g3uaYOBeKB+/Nw2VG5r2ut7Ztzr5+AxcA7AMaY0sDHwCPW2oT8fC4RERERkfzmUdgFiIiIiIgUR8aYasCNwN3AVGNMRWvtscu83BPADmPMrcBAYJm1dlY+lSoiIiIiUmAUMIuIiIiIXJ77gTBr7TRjzE5gMPD25VzIWhtrjHkS+AawQMP8K1NEREREpOCoRYaIiIiIyOW5H5ic8/1kLt4m431jzKlcr1d+d3wNEAAssNbG5HOtIiIiIiIFQgGziIiIiMglMsZ0BGoAU3KGJgNNjDHN/+S0J6y1pXO9Xvrd8XHARKCXMaZ9/lctIiIiIpL/1CJDREREROTSDQUMsMkY8/vxTZd6MWPMA0BVoA8QBnxujGlhrc3Ih1pFRERERAqMVjCLiIiIiFwCY4wPMAAYCTTP9XocGGSMuaRFHMaYysBbwEPW2nTgEyAOeCE/6xYRERERKQgKmEVERERELs1tQCow0Vp77MwL+ALnE4I9/uC8D40xSble4TnjHwFTrLUrAKy1FngIeMoY06hgH0VERERE5MoY5/2riIiIiIiIiIiIiMil0QpmEREREREREREREbksCphFRERERERERERE5LIoYBYRERERERERERGRy6KAWUREREREREREREQui0dhF3Ax5cqVs9WrVy/sMkRERERERERERESuG+Hh4bHW2qCLzSvyAXP16tUJCwsr7DJERERERERERERErhvGmEN5macWGSIiIiIiIiIiIiJyWRQwi4iIiIiIiIiIiMhlUcAsIiIiIiIiIiIiIpclTwGzMeagMWarMWaTMSbsd8f+ZoyxxphyOT8bY8z7xph9xpgtxpiWueYONcbszXkNzd9HEREREREREREREZGr6VI2+etqrY3NPWCMqQp0ByJzDfcE6uS82gIfA22NMWWBfwGhgAXCjTGzrLUnr6B+ERERERERERERESkkV9oi4x3gHziB8Rn9gYnWsQYobYypBNwKLLTWxueEyguBHld4fxEREREREREREREpJHkNmC2wwBgTbowZCWCM6Q9EW2s3/25uMBCV6+fDOWN/NH4eY8xIY0yYMSYsJiYmjyWKiIiIiIiIiIjI9SrbZflp8xE+XrqfuKT0wi7nupHXFhmdrLXRxpjywEJjzC7geZz2GPnOWjsOGAcQGhpqLzJdREREREREREREioKkEzD7r9CgHzQdAMYU+C2zsl3M3nKUDxbvZX9MMgDv/7KXIe1CGNm5FkF+3gVew/UsTwGztTY65+sJY8wM4EagBrDZOH9JqgAbjDFtgGigaq7Tq+SMRQNdfje+9MrKFxERERERERERkcJw+GQKh0+mcuRUKkcT0jgen8jgPU9QL30r7JqN3TYN0+cdCLhgE4MrlpXtYuamI4xdso8DscnUr+jHR4NbUqd8KT5aup/xKw8wac0hBrWpxiPtggg6uhQa9gMPBc75yVj75wuEjTElATdr7emc7xcCL1tr5+WacxAItdbGGmN6A6OAXjib/L1vrW2Ts8lfONAy57QNQCtrbfyf3T80NNSGhYVd3tOJiIiIiIiIiIhIvhu/8gCvzN5xzth/fb5iIPN5w/dvpCWc4Dmv7/D09MLt1teg5f35tprZ5bJM3xjN+7/sJTI+hYaV/Hnipjp0b1gBN7ez94iISWLskv0kbP6JVzzGU8nEk9V6JB6938qXOq51xphwa23oxeblZQVzBWBGzkplD2By7nD5AubihMv7gBRgOIC1Nt4Y8wqwPmfeyxcLl0VERERERERERKRoiU/O4N2Fe+hQK5BHu9SmUmkfqh6cjtec+dB+FM/c8hLfro/ktrmt+Vf6p7T76QlnNXO/96FM9Su697boBF76cRsbI0/RJDiAz+8P5aYG5TEXCK9rlkjlbbf3wHMaR71rMDulLn3Wj4O63aHOLVdUh5x10RXMhU0rmEVERERERERERIqOV2bvYMKqA8x7qjN1K/hBdDh80RNC2sGQ6eDurGmNPpXKC9M2UzniO170moyPO7jd+Tk06HPJ90xIzeTtBbv5es0hypb0YnTPBtzRMviCwTLWwpapMO85yEiGzs9Ax6d4Y94O+q8bQg3fVLxHrYFSQVf6R3FNy+sKZrerUYyIiIiIiIiIiIgUf1HxKUxafYi7WlVxwuWkEzBlCJSqAHdN+C1cBgguXYIJI9rS8o6n6W/f5lBmALGLxlzS/Vwuyw/hh+n2v6V8veYQ97Wrxi9/68KdrapcOFyO2w9f3wkzHoZydeHhFXDjP8DDi6d6NOH90s9CWgLp0x9xgmi5YgqYRUREREREREREJE/GLNyDMfDXW+pCdiZ8PwxST8LAb6Bk4HnzjTHc1aoK3zx9J7tLtMAjbjdpGVl5uldSehYDx63h799vplqgL7NGdeLf/RsTUMLz/Mmxe2H6w/BhKESthZ5vwfB5UL7+b1O8Pdx5esht/M81CO+IhbjWfX65fwySiwJmERERERERERERuajtRxKYuSma4R1rUCmgBMx/Hg6tgn4fQKWmf3pueX8f6jZqRWmSWLB+a57uN2n1IdYdjOc/tzfhh790oHFwwPmTTuyCaQ/C2Dawcxa0exQe3wBtR4Lb+dFn7fJ+VOv5NEuzm+Ga/4JzvlwRBcwiIiIiIiIiIiJyUW/M242/jyePdK4GS/4D68ZB+1HQ9O48nV+jodPO99fVv3KxfeHSMrMZv/IAN9Qpx6C2Ibi5/a4dxomdzurpj9rBrrnQ4Ql4cgvc+hr4VfjTaw9uV41Z1V8gMduLtKnDISs9T/XLhSlgFhERERERERERkT+1al8sy/fE8Fw7XwKm3AbL3oCmA+Hmf+f5GibIaVfheXIP6w7E/+ncaRsOE5uUziNdap17IC0Bfn4WPu4AexfBDU/DU1vhln/nedM+Ywwv3NOFl91H4RO3g6yFeX8GOZ/HxaeIiIiIiIiIiIjI9crlsvz3510M91vHwA3jAQN3fAZNB1zahfwqYr39acIRvlh1gLY1z+/ZDJDtsoxbHkGzKgG0PzPHWtjyHSx4EZJjIHQEdHsRfMte1jMFlvLmtntGMHFSGPevHQu4ICAYSpR1rnnmq2/gZd/jeqGAWURERERERERERP7Q/A17GHHiP9zuvgqqtoM7PoUy1S/9QsZgyjeg3alYnttxnKj4FKqW9T1v2s/bjnIoLoXRQ1pijIHjO2Du351+z8GtYNBUCG55xc/VpV55Xms9mtVh0bRZOw53ss+bk12yPO7P7L3ie13LFDCLiIiIiIiIiIjIBWUeWk/zOfdS3j0OV5fncbvhb+B+BZFiUD2CY2djjGHi6oO80LvhOYettXyybD81g0rSvUF5WPASrB4LPv7Q9z1ocf8FN++7XH/r1ZyH497jwYNxmIwkypjTlCGJMiaJ0pymtLs7aqDx5xQwi4iIiIiIiIiIyPmsJXXKcLJdlk3dp9Cq461Xfs2g+rhvmMjd9X2Ysj6Kp26uS0nvsxHly
"text/plain": [
"<Figure size 1440x720 with 3 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(nrows=3, ncols=1, figsize=[20,10])\n",
"\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" dataset = get_dataset(dataset_name)\n",
" \n",
" ax[count].plot(dataset[train_split:train_split+200])\n",
"\n",
" model1 = cUtil.load_obj('model2'+dataset_name)\n",
"\n",
" forecasts = model1.predict(dataset[train_split:train_split+200])\n",
" \n",
" ax[count].plot(forecasts)\n",
" \n",
" ax[count].set_title(dataset_name)\n",
" \n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 143
},
"colab_type": "code",
"id": "0ZotUMWW9mXY",
"outputId": "b6c483fa-0f67-48ff-a66f-2645dd0a4d79"
},
"outputs": [
{
"data": {
"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>Dataset</th>\n",
" <th>RMSE</th>\n",
" <th>SMAPE</th>\n",
" <th>Theil's U</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>TAIEX</td>\n",
" <td>84.15</td>\n",
" <td>1.42</td>\n",
" <td>1.28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>SP500</td>\n",
" <td>5.58</td>\n",
" <td>0.40</td>\n",
" <td>1.01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>NASDAQ</td>\n",
" <td>27.98</td>\n",
" <td>1.33</td>\n",
" <td>1.17</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Dataset RMSE SMAPE Theil's U\n",
"0 TAIEX 84.15 1.42 1.28\n",
"1 SP500 5.58 0.40 1.01\n",
"2 NASDAQ 27.98 1.33 1.17"
]
},
"execution_count": 16,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"from pyFTS.benchmarks import Measures\n",
"\n",
"rows = []\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" row = [dataset_name]\n",
" \n",
" dataset = get_dataset(dataset_name)\n",
" \n",
" test = dataset[train_split:train_split+200]\n",
"\n",
" model1 = cUtil.load_obj('model2'+dataset_name)\n",
" \n",
" row.extend(Measures.get_point_statistics(test, model1))\n",
" \n",
" rows.append(row)\n",
" \n",
" \n",
"pd.DataFrame(rows,columns=[\"Dataset\",\"RMSE\",\"SMAPE\",\"Theil's U\"])\n",
" \n",
" \n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "g_pyPx8m9mXe"
},
"source": [
"## Residual Analysis"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"colab_type": "code",
"id": "h5TFuyfW9mXh",
"outputId": "cff3f28c-4e26-4d2e-e0ce-ddff3bd05879"
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 576x576 with 8 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 576x576 with 8 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAI4CAYAAACGHoanAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XmcU/W9//HXm00FF1YVWcQFrWhdKdjaVhBUxAW11uXSutRK69La2vtrtfSq15bWLrfWtmrFul5HkbpSRS0gqPW6gXUDtSIKssgiAiIqAp/fH+cbOGSSTGYmycnkfJ6PRx6T8z0nyWcmZ3I++a4yM5xzzjnn0qhV0gE455xzziXFEyHnnHPOpZYnQs4555xLLU+EnHPOOZdangg555xzLrU8EXLOOedcankiVEGSZkoalGffIEnzS/Q60yR9uxTP5WqDpHckDW3iY78i6Y1Sx+TqK/QZ4RyApMsl3d7Ex54p6Z8F9j8s6Yxcx0paLWnXprxuI2Os+PXLE6E8woXj4/DmvyfpFklbN+c5zWxvM5tWohBdCYV/vg8kbdGIx5ik3csZVxKyfy8ze9LM9kwyplqRKyGNX3CK+YyQ1Ce8R23KGKoroazryeJSXE/KwcyOMrNb8+zb2szmAIT4f9HU1ynF36OU/weeCBV2rJltDewPHABcknA8rgwk9QG+AhhwXKLBNCDXP71fEF0p+flUNpnryYFAf+Bn2QcokpbrcoN/j0pJyx+8WczsPeBRooQISVtI+p2keSGb/YukrcK+rpIelLRC0nJJT2ZO7Pi3QUlbhSz4A0mzgC/EXzP7W3k8A5fUKbzG0vD4ByX1zBW7pN0lPS5ppaRlku4qw5+opTsdeAa4BTgjU5hdRRv/5i7piVD8UvhWc0ooP0fS7PDeT5C0U+zxe0uaFPYtlvTTUL6FpD9IWhhuf8jUTGWaTCX9RNJ7wM25ysKxx0h6MZx7/ydp31y/rKQBkp4Oxy2S9GdJ7fL9XspqtpW0V/jbrFDUlHNcbN8tkq6R9JCkDyU9K2m3pr0t6ZP1GTFA0nRJq8L58vtwWOY9WhHeoy9KaiXpZ5LmSloi6TZJ28We9/Sw731J/5X1OpdLulvS7ZJWAWcWOkfCY0zSeZLeDO/zzyXtFs67VZLGx493m5jZAuBhYB/Y+DkzRtJTwBpgV0k7hc+P5eHz5Jysp9lS0l3hb/+CpP0yOyRdLOmtsG+WpBOyHqvwfq6U9LqkIbEdeZulwnu+u6RRwEjgx+H8+7uk/yfpnqzj/yjp6sb+PbKeo9B5Xe//oKHXyscToSIoSjKOAmaHoiuBPYgSo92BHsClYd+PgPlAN2AH4KdENQ3ZLgN2C7cjiV2Ai9CK6OK3M9Ab+Bj4c55jfw78A+gE9AT+1IjXSYvTgbpwO1LSDg09wMy+Gu7uF6qM75J0GPAr4GSgOzAXGAcgaRtgMvAIsBPReTMlPMdo4GCi82k/YACbfzvaEehM9H6PylUm6QDgJuA7QBfgemCCcjf1rQd+CHQFvggMAc7L93vFHyipLfB3onNqe+B7QJ2keNPZqcB/E51zs4ExOf+IriFXA1eb2bZEnxPjQ3nmPeoY3qOngTPDbTCwK7A14TNBUj/gWqKLV3dgO6LPrLgRwN1AR6L/g7znSMyRwEFE5+6PgbHAN4BeRBe105rxu9csSb2A4cC/YsXfJPrf3oZNnxvziT4rTgJ+GT5fMkYAfyP6DLgDuD/8bwK8RVTDvR3R/+HtkrrHHjswHNOV6Dp0r6TOxcZvZmOJzpHfhPPvWOB2YJikjuF3bEP0OXBbQ8+X5++RcSZ5zmty/x80jZn5LccNeAdYDXxIlMhMIfqQEPARsFvs2C8Cb4f7VwAPALvnec6h4f4cYFhs3yhgfmzb4s9BVFvxizyx7g98ENueBnw73L+N6AOqZ9J/02q8AV8GPgO6hu3XgR9m/x3D9pnAPwu8RzcSfThktrcOz92H6KLwrzwxvAUMj20fCbwT7g8C1gJbxvbnKrsO+HnW874BHJp97uV4/R8A9xX4vQZlzk2iD9j3gFax/XcCl8fO07/G9g0HXk/6fa6WW+xzZUXstiZzXmV9RjxBdCHrmvUcfcJ71CZWNgU4L7a9Zzj32hB9Sbsztq99OH8yr3M58EQDcec6Rw6Jbc8AfhLb/h/gD0n/vavllvW+zyVKTLcK+6YBV8SO7UWUiG4TK/sVcEvs/Xomtq8VsAj4Sp7XfhEYEe6fCSwEFNv/HPDNWCzfjh2b8/OOHNcjolqdc8L9Y4BZzfh7ZGIodF7X+z9o6s1rhAo73sy2IboQfI4og+5G9EEyI1QbryD6lt8tPOa3RN+C/yFpjqSL8zz3TsC7se25xQYlqb2k60N14SqiD8yOklrnOPzHRMnbc6EZ41vFvk5KnAH8w8yWhe07aFztXNxOxN5HM1sNvE/07bsXUcLT4OPC/Z1i20vN7JOsx2SX7Qz8KHNOhvOyV9bzACBpD0XNqe+F8+eXROd2MXYC3jWzDVnxxmsY3ovdX0OUELpNjjezjpkb9WtaMs4mqnl+XdLzko4p8Jy5zqE2RLXSm33WmNkaovMyLv5ZVOw5sjh2/+Mc2/6+by7zvu9sZueZ2cexffG//07AcjP7MFaW/T8Wfz83sKn2KNMM+mLsc2AfNn/vFljIKmLPXe9zogluJaoRJPz83waOL/T3yCh0XpeMJ0JFMLPHiTLg3wHLiP7J9459mG1nUacvzOxDM/uRme1K1PH2ongbbMwiogtVRu+s/WuIEq6MHWP3f0SUGQ+0qNo8U0WoHLG/Z2bnmNlORM0m16oGRzo1haJ+XScDh4YP/PeImgP2C23uH5H/PchlIVFCknn+DkTNVAuIPrjyDT3d7HFE58LC2HauptXssneBMfELrJm1N7M7czz2OqKar77h/PkpOc6dArH20uYdOnsT/Y6uhMzsTTM7jagJ8tfA3eGcynU+5DqH1hElJ4uImsWBjed9l+yXy9puzjniGi/+918IdA7N6RnZ/2Mbrx3hf7EnsFDSzsANwAVAl5Bov8rm710PSfHt7M+bxsabcT+wr6R9iGqE6hr5nLkUOq9zxdAknggV7w/A4cDniU60qyRtDyCph6Qjw/1jQocyASuJqjg35Hi+8cAlijo+9yTqaxH3IvAfklpLGgYcGtu3DVEytiK07V6WL2hJX9emjtQfEJ08ueJJo+OJ3p9+RM2L+wN7AU8S9Rt6ETgx1MDtTvQNPW4xmyc3dwJnSdo/9M35JfCsmb0DPAh0l/QDRZ2jt5E0MPa4n0nqJqkrUVNGY+cJuQH4rqSBinSQdHTWh2nGNsAqYLWkzwHnNvB7xT1LlKT/WFJbRXPeHEvoC+VKR9I3JHUL3/hXhOINwNLwM/vc+6GkXRQNQ/4lcJeZrSPq+3OspC8p6sB8OQ0nNQ2dI65MzOxd4P+AX0naUtGgh7PZ/DPhIEknhr44PwA+JRrwkUmUlwJIOov6nZC3B74f/n+/TvSZN7GRYdb7jAg11HcT1ao/Z2bzGvmcuRQ6r3P9HzSJJ0JFMrOlRP1tLgV+QtT89UyoNp5MVEMD0DdsrwaeBq41s6k5nvK/iar53ibqeJpdjXgh0QVmBVEnx/tj+/4AbEVUO/UMUdNcPl8AnpW0GpgAXGhhLgjHGcDNZjYv1Jy9Z9EIwT8T/c2vIupLsZio2jf7G87lwK2hCvpkM5sM/BdwD9G38N2IOgwSqrkPJ3pP3wPeJOoACPALYDrwMvAK8EIoK5qZTQfOCbF/QHR+npnn8P8E/oOo/9sNQPZIws1+r6zXWRt+h6OIzr9rgdPN7PXGxOuKMgyYGf53rwZONbOPQ9PWGOCp8B4dTNRR/n+JmsnfBj4hfLkys5nh/jii83I1sITo4plPQ+eIK6/TiPrALATuAy4Lny8ZDwCnEP2vfxM40cw+M7NZRP2znib63Po88FTWcz9LdJ1aRnQenWRm2U2lDbkR6BfOv/i16dbwmg01ixWr0Hmd6/+gSbR5U6FzzrlaFr5ZryBq9no76Xhc7ZDUm6hJdUczW5V0PMXyG
"text/plain": [
"<Figure size 576x576 with 8 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"from pyFTS.benchmarks import ResidualAnalysis as ra\n",
"\n",
"for count,dataset_name in enumerate(dataset_names):\n",
" dataset = get_dataset(dataset_name)\n",
" \n",
" model1 = cUtil.load_obj('model1'+dataset_name)\n",
" model1 = cUtil.load_obj('model2'+dataset_name)\n",
"\n",
" ra.plot_residuals_by_model(dataset, [model1, model2])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Mj_ik15O9mXl"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "pQn4vlUl9mXn"
},
"outputs": [],
"source": []
}
],
"metadata": {
"colab": {
"include_colab_link": true,
"name": "Chen - ConventionalFTS.ipynb",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 0
}