2017-02-22 23:59:43 +00:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
2017-09-02 20:07:49 +00:00
"block_hidden": true
2017-02-22 23:59:43 +00:00
},
2017-09-02 14:26:57 +00:00
"outputs": [],
2017-02-22 23:59:43 +00:00
"source": [
"%load_ext rpy2.ipython\n",
"%matplotlib inline\n",
"from fbprophet import Prophet\n",
"import pandas as pd\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
2017-09-02 14:26:57 +00:00
"import logging\n",
"logging.getLogger('fbprophet').setLevel(logging.ERROR)\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
2017-02-22 23:59:43 +00:00
"df = pd.read_csv('../examples/example_wp_peyton_manning.csv')\n",
"df['y'] = np.log(df['y'])\n",
"m = Prophet()\n",
"m.fit(df)\n",
"future = m.make_future_dataframe(periods=366)"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 2,
2017-02-22 23:59:43 +00:00
"metadata": {
2017-09-02 20:07:49 +00:00
"block_hidden": true
2017-02-22 23:59:43 +00:00
},
"outputs": [
{
"data": {
"text/plain": [
2017-07-05 08:20:22 +00:00
"Initial log joint probability = -19.4685\n",
2017-02-22 23:59:43 +00:00
"Optimization terminated normally: \n",
" Convergence detected: relative gradient magnitude is below tolerance\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R\n",
"library(prophet)\n",
"df <- read.csv('../examples/example_wp_peyton_manning.csv')\n",
"df$y <- log(df$y)\n",
"m <- prophet(df)\n",
"future <- make_future_dataframe(m, periods=366)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2017-09-02 14:26:57 +00:00
"### Modeling Holidays and Special Events\n",
"If you have holidays or other recurring events that you'd like to model, you must create a dataframe for them. It has two columns (`holiday` and `ds`) and a row for each occurrence of the holiday. It must include all occurrences of the holiday, both in the past (back as far as the historical data go) and in the future (out as far as the forecast is being made). If they won't repeat in the future, Prophet will model them and then not include them in the forecast.\n",
2017-02-22 23:59:43 +00:00
"\n",
2017-09-02 14:26:57 +00:00
"You can also include columns `lower_window` and `upper_window` which extend the holiday out to `[lower_window, upper_window]` days around the date. For instance, if you wanted to included Christmas Eve in addition to Christmas you'd include `lower_window=-1,upper_window=0`. If you wanted to use Black Friday in addition to Thanksgiving, you'd include `lower_window=0,upper_window=1`. You can also include a column `prior_scale` to set the prior scale separately for each holiday, as described below.\n",
2017-02-22 23:59:43 +00:00
"\n",
"Here we create a dataframe that includes the dates of all of Peyton Manning's playoff appearances:"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 3,
"metadata": {},
2017-02-22 23:59:43 +00:00
"outputs": [],
"source": [
"playoffs = pd.DataFrame({\n",
" 'holiday': 'playoff',\n",
" 'ds': pd.to_datetime(['2008-01-13', '2009-01-03', '2010-01-16',\n",
" '2010-01-24', '2010-02-07', '2011-01-08',\n",
" '2013-01-12', '2014-01-12', '2014-01-19',\n",
" '2014-02-02', '2015-01-11', '2016-01-17',\n",
" '2016-01-24', '2016-02-07']),\n",
" 'lower_window': 0,\n",
" 'upper_window': 1,\n",
"})\n",
"superbowls = pd.DataFrame({\n",
" 'holiday': 'superbowl',\n",
" 'ds': pd.to_datetime(['2010-02-07', '2014-02-02', '2016-02-07']),\n",
" 'lower_window': 0,\n",
" 'upper_window': 1,\n",
"})\n",
"holidays = pd.concat((playoffs, superbowls))"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 4,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
2017-09-02 14:26:57 +00:00
"outputs": [],
2017-02-22 23:59:43 +00:00
"source": [
"%%R\n",
"library(dplyr)\n",
"playoffs <- data_frame(\n",
" holiday = 'playoff',\n",
" ds = as.Date(c('2008-01-13', '2009-01-03', '2010-01-16',\n",
" '2010-01-24', '2010-02-07', '2011-01-08',\n",
" '2013-01-12', '2014-01-12', '2014-01-19',\n",
" '2014-02-02', '2015-01-11', '2016-01-17',\n",
" '2016-01-24', '2016-02-07')),\n",
" lower_window = 0,\n",
" upper_window = 1\n",
")\n",
"superbowls <- data_frame(\n",
" holiday = 'superbowl',\n",
" ds = as.Date(c('2010-02-07', '2014-02-02', '2016-02-07')),\n",
" lower_window = 0,\n",
" upper_window = 1\n",
")\n",
"holidays <- bind_rows(playoffs, superbowls)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Above we have include the superbowl days as both playoff games and superbowl games. This means that the superbowl effect will be an additional additive bonus on top of the playoff effect.\n",
"\n",
"Once the table is created, holiday effects are included in the forecast by passing them in with the `holidays` argument. Here we do it with the Peyton Manning data from the Quickstart:"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 5,
2017-09-02 20:07:49 +00:00
"metadata": {},
2017-09-02 14:26:57 +00:00
"outputs": [],
2017-02-22 23:59:43 +00:00
"source": [
"m = Prophet(holidays=holidays)\n",
"forecast = m.fit(df).predict(future)"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 6,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
2017-07-11 05:57:13 +00:00
"Initial log joint probability = -19.4685\n",
2017-02-22 23:59:43 +00:00
"Optimization terminated normally: \n",
2018-05-29 22:48:11 +00:00
" Convergence detected: relative gradient magnitude is below tolerance\n"
2017-02-22 23:59:43 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R\n",
"m <- prophet(df, holidays = holidays)\n",
"forecast <- predict(m, future)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The holiday effect can be seen in the `forecast` dataframe:"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 7,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
2018-05-29 22:48:11 +00:00
" ds playoff superbowl\n",
"17 2014-02-02 1.22536 1.200273\n",
"18 2014-02-03 1.90393 1.453321\n",
"19 2015-01-11 1.22536 0.000000\n",
"20 2015-01-12 1.90393 0.000000\n",
"21 2016-01-17 1.22536 0.000000\n",
"22 2016-01-18 1.90393 0.000000\n",
"23 2016-01-24 1.22536 0.000000\n",
"24 2016-01-25 1.90393 0.000000\n",
"25 2016-02-07 1.22536 1.200273\n",
"26 2016-02-08 1.90393 1.453321\n"
2017-02-22 23:59:43 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R\n",
"forecast %>% \n",
" select(ds, playoff, superbowl) %>% \n",
" filter(abs(playoff + superbowl) > 0) %>%\n",
" tail(10)"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 8,
2017-09-02 20:07:49 +00:00
"metadata": {},
2017-02-22 23:59:43 +00:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
2018-05-29 22:48:11 +00:00
"<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",
2017-02-22 23:59:43 +00:00
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ds</th>\n",
" <th>playoff</th>\n",
" <th>superbowl</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2190</th>\n",
" <td>2014-02-02</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.22536</td>\n",
" <td>1.200273</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2191</th>\n",
" <td>2014-02-03</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.90393</td>\n",
" <td>1.453321</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2532</th>\n",
" <td>2015-01-11</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.22536</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2533</th>\n",
" <td>2015-01-12</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.90393</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2901</th>\n",
" <td>2016-01-17</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.22536</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2902</th>\n",
" <td>2016-01-18</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.90393</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2908</th>\n",
" <td>2016-01-24</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.22536</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2909</th>\n",
" <td>2016-01-25</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.90393</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2922</th>\n",
" <td>2016-02-07</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.22536</td>\n",
" <td>1.200273</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2923</th>\n",
" <td>2016-02-08</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.90393</td>\n",
" <td>1.453321</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
2018-05-29 22:48:11 +00:00
" ds playoff superbowl\n",
"2190 2014-02-02 1.22536 1.200273\n",
"2191 2014-02-03 1.90393 1.453321\n",
"2532 2015-01-11 1.22536 0.000000\n",
"2533 2015-01-12 1.90393 0.000000\n",
"2901 2016-01-17 1.22536 0.000000\n",
"2902 2016-01-18 1.90393 0.000000\n",
"2908 2016-01-24 1.22536 0.000000\n",
"2909 2016-01-25 1.90393 0.000000\n",
"2922 2016-02-07 1.22536 1.200273\n",
"2923 2016-02-08 1.90393 1.453321"
2017-02-22 23:59:43 +00:00
]
},
2018-05-29 22:48:11 +00:00
"execution_count": 8,
2017-02-22 23:59:43 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"forecast[(forecast['playoff'] + forecast['superbowl']).abs() > 0][\n",
" ['ds', 'playoff', 'superbowl']][-10:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The holiday effects will also show up in the components plot, where we see that there is a spike on the days around playoff appearances, with an especially large spike for the superbowl:"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 9,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"data": {
2018-05-29 22:48:11 +00:00
"image/png": "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\nSYMlY6JY/m6TTCbgvZG
2017-02-22 23:59:43 +00:00
"text/plain": [
2018-05-29 22:48:11 +00:00
"<matplotlib.figure.Figure at 0x7f490bf87940>"
2017-02-22 23:59:43 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"m.plot_components(forecast);"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 10,
2017-09-02 20:07:49 +00:00
"metadata": {},
2017-02-22 23:59:43 +00:00
"outputs": [
{
"data": {
2018-05-29 22:48:11 +00:00
"image/png": "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\nzZW1ip2+XUXOQPbdVeT
2017-02-22 23:59:43 +00:00
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -w 9 -h 12 -u in\n",
"prophet_plot_components(m, forecast);"
]
},
2017-09-02 14:26:57 +00:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Individual holidays can be plotted using the `plot_forecast_component` method (Python) or function (R). For example, `m.plot_forecast_component(forecast, 'superbowl')` in Python and `plot_forecast_component(forecast, 'superbowl')` in R to plot just the superbowl holiday component."
]
},
2018-05-29 22:48:11 +00:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fourier Order for Seasonalities\n",
"\n",
"Seasonalities are estimated using a partial Fourier sum. See [the paper](https://peerj.com/preprints/3190/) for complete details, and [this figure on Wikipedia](https://en.wikipedia.org/wiki/Fourier_series#/media/File:Fourier_Series.svg) for an illustration of how a partial Fourier sum can approximate an aribtrary periodic signal. The number of terms in the partial sum (the order) is a parameter that determines how quickly the seasonality can change. To illustrate this, consider the Peyton Manning data from the Quickstart. The default Fourier order for yearly seasonality is 10, which produces this fit:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Initial log joint probability = -19.4685\n",
"Optimization terminated normally: \n",
" Convergence detected: relative gradient magnitude is below tolerance\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAogAAADYCAIAAADnOoUzAAAACXBIWXMAAAsSAAALEgHS3X78AAAg\nAElEQVR4nO3dd1xT5/oA8Dd7AgFCgCB7LxFUQFyouPeq1VpHtbW11qrVq73aUmunV1tvqa1Va124\nbcU9cOLAvRCUsPcKKwOyf3+kPy4FVAgnOcnh+f7RDz0m73lOHg5PzjnvIOl0OgQAAAAA80DGOwAA\nAAAA/A8UZgAAAMCMQGEGAAAAzAgUZgAAAMCMUPHdvUwmw7A1MplMJpPVajWGbeKFQqFoNBq8o8AA\nkZKCCJQXhBCNRlOr1YTp/kmk1CDIjnmj0WgajUar1WLVIIfDaf6/OBfmhoYGDFtjMBhMJhPbNvHC\n4XCIcSBESgoiUF4QQvq8qFQqvAPBBpFSgxBiMBgqlQqyY54YDAa2506Lwgy3sgEAAAAzAoUZAAAA\nMCNQmAEAAAAzAoUZAAAAMCNQmAEAAAAzAoUZAAAAMCM4D5eyOBKF5uizqpOZ1U/LZdVyFZdOiRBy\nx/rbzwhzoFPgWw4AAIDOgsLcXmqt7re7pT+lloQ6ciYH8b8d6uHAoUkUmpsF9bselSekFv881qeP\nqzXeYQIAALBsUJjb5XmlfOGJLDqFnDjFv5eLVdN2HpM6LdRhWqjD4bTKmYdfxA92m9XDEcc4AQAA\nWDoozK/3V3rV8rO5S2KECyOFFDKpzddMDXEIdOBMOfCMQSFPC3UwcYQAAAAIAwrza2y6VfzbndK9\nU/1fe5s6xJG9b2rgGwczXKzp/dxtTBMeAAAAgoH+Si+l06E1yXmJjypOzQpp58PjCCF3/XDPhSey\nquUEmeEWAACAiWFfmNetW9fY2Nj0vyqVauPGjWvXrt25cyfm+zIenQ6tupB7Jbfu5NvBXrbM9r9x\nUhB/oCdv+dkc48UGAACAwLAszBKJZPny5Xfv3m2+MTU1VSgUxsfHl5aWFhYWYrg7o/r8Yt6N/Ppj\nbwU5cukdfe/Xce6pRZIrubXGCAwAAACxYVmYuVzu999/Hxoa2nyjSCTy9vZGCHl6eopEIgx3Zzwb\nrhedFdUcmR7IZ9MMeLs1g/r5IPd/X8hTaTBbrRMAAEAXgWXnLxKJRKFQyOR/FHu5XG5vb48Q4vP5\nMplMv3Hy5Mn5+fkCgeD06dMYBqDH5/M78/bfbuXvflx5fVFfL3u2wY18GMvf/bgqKbvh/Rh3gxth\nsVgGv9fcdDIpZoVIebGxIVQvRSKlBkF2zBuG2ZHL5S22GL1XNpvNFovF3t7eYrHYweHvcUS7d+/W\naDRkMlksFmO4LwaDwWAw6uvrDW7hQnbNqpOiY2+F2KAGsbhTy3ovj3H+5OyL8T5sw2YE43A4Td9j\nLBqdTmcymZ1JilkhTF4QQjweTyaTYbjYO76IlBoE2TFvNjY2crkcw+yw2f+4DjR6Yfb19c3Ly4uM\njMzPz4+JidFv5HA4+h+adxPrPJ1O1/RfAzwtl32QJNo6wS9YwDK4kSaDvXhOXHrio4o5EYZMOaLT\n6Tofg/kgzLEQLy+EORwiHQv6/8MhzBER6Vj0jHpERhwulZmZmZCQEB0dXVxcvH79eoFA4Orqarzd\ndVK5VDnz8PPVA90GeWJ2g+KTvt1+vl2s0RLq1xEAAIBRYX/FvG7dOv0Pfn5+fn5+CKGlS5divhds\nKTS62UczR/nZGXZ1+zJDvHg0Cvl8Vs1IPzsMmwUAAEBgMMEIQggtP5tjxaCsi/PAtlkSCc3v6bTt\nXhm2zQIAACAwKMxo673S1IL6reN9qS+ZB7sz3gx1eFIuy6hs2ekOAAAAaFNXL8x3iiT/SSnaPcXf\nlmWUfnAcOmVyMH/f4wpjNA4AAIB4unRhLpUo5/z54j8jvAIdDB+y/FrTQx0OpVUqYbIRAAAA7dB1\nC7NKo333WOaUYP6EQHuj7qiHM9fZin4+C2boBAAA8HpdtzDHX8pHCH0W62aCfc0IE+x/AnezAQAA\nvF4XLcxJGeK/0sXbJvjRDJqWq6MmBzlcy6uDtSABAAC8VlcszLk1jcvP5vw23tfZqsMrRxnGnk2N\ncrU+lVltmt0BAACwXF2uMCs1uvnHMt/r7TzAw6QTxE8MtD+WgeXE4AAAAAipyxXmzy/m8ZjUT/q6\nmHi/o/3t7hRJKmRwNxsAAMCrdK3CfOpF9fHn4l/H+ZJJ2M8l8mo8JrWfu/XpF3A3GwAAwKt0ocJc\nVKdYdjZn81hfAYeGSwCj/OxOZ8LdbAAAAK/SVQqzVqdbdDJrRncHDBeP6qiRfnY3C+prG9V4BQAA\nAMD8dZXCvPFGsUyl/XQAnutO8tm0Hs7ci9kw0wgAAICXMsoE0e1HwvRZr7611m3eKar/7W7phbnd\nGVQKhrszwGh/+7NZNVNCHNrzYmw/HHzBsZgnEolEsMPBOwTMkP4f3oFghkjHgox87uBcmJlMJoat\nUalUMpncok2JQrPwRPa3I3yCnHkY7ssw40KcN1y/S6HRXzuxCZVKxfbDwUubSbFchMkLQohEItHp\ndAoF52+rWCFSahBkx7yRyWQMs6NWt3y+iXNhbmhowLA1BoNBJpNbtLn4RFawgDU10BbbfRnGhY3s\n2dSrWZV93axf/crWB2Kh2kyK5SLSsTCZTIVCoVIRZAgfkVKDEGIwGJAds2Xs7OBcmI3tWIb4en7d\nlXe64x3I/wz1tk3OrnltYQYAWKi82sb7xVKZSuNizQh35toZZ0lZQGBE/o0plShXns/dOs7Hjo3P\n+Kg2xXnzPruYHz/IHe9AAAAYu1ss+fxifkalPLKblRWdUlCneFElH+lrt3KAq5ctcW7kAmMjbGHW\n6dBHp7KnBPEHeuL/aLm5vu42RfWKwjqFqw0D71gAANjQ6dA31wp3PSz7V79ub4cHMyh/dwsqlSi3\n3isdsuPJsr4ui6JciNX/CRgLYYdLbbtfWi5Vfj7Y7C5M6RRSXzdrGDQFAGFodboPTojOiaovze0+\nv5dzU1VGCDlb0eMHuZ+eFXLwadX8Y5kNKi2OcQJLQczC/KJK/v21ol/G+jQ/Q8zHIC/e1bw6vKMA\nAGBjdXK+SNxw8u3gbi+5DRbowD4zK0Sq1Ew/lCFTakwcHrA4BCzMKo124Ymsj6KdQx05eMfStoEe\nNin5dWqtDu9AAACd9fv9svOi6v1vBFozXvVk0IpB2TPFn8eiTj/0vFEN183gVQhYmP9zvYhJJX8U\nber1o9rP155lxaA8LJXiHQgAoFPSK+VfXy3YMcm/PTPw0ynkbeN92TTy/GOZ8L0cvALRCnNqfu2O\nB+Wbx/pQyOZ4E7tJrIfN5Rx4zAyABVNptO8niVb0cw1zau/NORqFvGOSv1iuXp2cZ8zQgGUjVGGW\nKTVzDz35YrC7B8/cRybAY2YALN0vd0q5DMqC3k4dehebRt4zxf9CVs22e2VGCgxYOkIVZjqFtCbO\nZ2aYAO9AXq+fu82jUil0AwHAQhXWKf57q3jDCC8DFnfns2mJUwO+Tym8mgu3zUAbCFWYaRTyW+FC\nvKNoFzsW1Y/PulUowTsQAIAh1l0pmB4qCHJgG/b2QAf2f0d5v5ckyq9VYBsYIABCFWbL0t/dJiUf\n7mYDYHkelUov59R+0rdTPUxH+9vNjXCaffQ5DG5+mSq5KiW/7vhz8ckX1WnlcqUG/w+qXKo0QRiE\nnfnL/A3w4H1ztQDvKAAAHbbuSsGiaGHn5/r9V/9uT8tlS05n/zbeF5PAiEGp0R59Jt79qPxpmdTH\nnsXn0DVaXZa4QabSjPS1e6enY0+hFV6BzTzyYkZ3h6WD7Yy6IyjMuIl2tXpRJa+Wq8xqKm8AwKvd\nLpJkVMr3TgnofFNkEumXsT7Ddz39ObVkUbRlPIYztuTs2pXncuzZtPcjnYf52HLp/1taMbu68ciz\nyhmHX0Q4c74Z6ulp8unHv7tWxKCQZvVwNPaOsCzMKpXqp59+kkql7u7uc+bM0W+sqqpatmyZQCBA\nCC1dutTFxXyHF5sYl04
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -w 9 -h 3 -u in\n",
"m <- prophet(df)\n",
"prophet:::plot_yearly(m)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n4cOHez9Wq9XIycmxasz
"text/plain": [
"<matplotlib.figure.Figure at 0x7f490bd97da0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from fbprophet.plot import plot_yearly\n",
"m = Prophet().fit(df)\n",
"a = plot_yearly(m)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The default values are often appropriate, but they can be increased when the seasonality needs to fit higher-frequency changes, and generally be less smooth. The Fourier order can be specified for each built-in seasonality when instantiating the model, here it is increased to 20:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Initial log joint probability = -19.4685\n",
"Optimization terminated normally: \n",
" Convergence detected: relative gradient magnitude is below tolerance\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAogAAADYCAIAAADnOoUzAAAACXBIWXMAAAsSAAALEgHS3X78AAAg\nAElEQVR4nO3dd1xT5/oA8Dd7QgKBMMMKe4iiKKKCg1oV2zpqHbVVq722vdbR2lavtl5rpz/bWrm1\nQ9u666pW6y6OilicoCLInmGZAIEkJGT9/si9FiEyT5KTw/P9ox97ODnnSR5OHs573kEyGo0IAAAA\nAPhAtnUAAAAAAPgbFGYAAAAAR6AwAwAAADgChRkAAADAEaptT69UKjE8GplMJpPJOp0Ow2PaCoVC\n0ev1to4CA0RKCiJQXhBCNBpNp9MRpvsnkVKDIDv4RqPR9Hq9wWDA6oAcDqft/9q4MLe0tGB4NAaD\nwWQysT2mrXA4HGK8ESIlBREoLwghU160Wq2tA8EGkVKDEGIwGFqtFrKDTwwGA9trp11hhqZsAAAA\nAEegMAMAAAA4AoUZAAAAwBEbP2NmsVgYHo1KpZLJZGyPaStUKpUwb4QwSUEEygtCiEQiMRgMKtXG\nXwJYIVJqEEJkMhmyg1vYZqdj31gbZ12tVmN4NAaDQSaTsT2mrRDmjdDpdMK8F0SgvCCEmExma2sr\nYboXESk1CLKDbwwGw6LZsXFhxnYwgOlohBlgQJg3guC94JXRaCTY27F1CJgx/o+tA8EMkd4LsvC1\nA8+YLehaZfP4Hfe8N2bsuF1r61gAAADYB4I8wMAhqUq76Gj+m8M9w119Xjma78qhJYc42zooAAAA\neAd3zJay7GTR+ECnfwzxGOnL+8/kwH/9UaI3EKolBwAAgCVAYbaIOzXKm1WKDUl+pv99SuzEoVNS\nixptGhQAAAA7AIXZIr65VrVgkBub9t+Pl0RCL0YL99yps21UAAAA8A8KM/Yq5JpzhQ2vDHZvu3H2\nAOGfpY3Vza22igoAAIBdgMKMvX1365KDnYUcWtuNzizqCB/HC8XQmg0AAKAzUJixd+S+dEakS8ft\nI3x46eVN1o8HAACAHYHCjLEbkmal1jDKl9fxRyN9HS+Xyq0fEgAAADsChRljh+9Lp0e4UMikjj+K\ncuNodIaieuLMSwcAAABzUJj/q0KuOVNQn1bWpztancF4LFc6PdxMOzZCiEImxYkc0+CmGQAAwJPB\nzF8IIbQzs/bfF8rChexKucbfifnts0EeDvReHOdqeZMDnTrAnfOkHUb6OqaXy+fHuPUhWAAAAEQG\nd8zouxvVm/+SHHsx4uRLkddeGxTiyp59MLdZo+/FoX7Pkz0bJuhkh8Ge3MxqRW8jBQAAQHzYF+YN\nGza0Xd5Lq9V+8cUX69ev37FjB+bn6rvsWtX/pVXumxFqus1lUsmfPuUX4MRccqKwp4fSG4wn8+qf\n6XRC7AghR9LU2qRpv/omAAAAYIJlYW5ubl65cuWNGzfabszIyPD09Fy3bl11dXVFRQWGp+s7vcH4\nxu8FqxJEYa7sRxvJJFLK5MA7NcpT+fU9OlpGZTOLSo5253ayD4tGDnBmZteqehkxAAAAosOyMHO5\n3M8//zwqKqrtxoKCArFYjBDy9/cvKCjA8HR9d+i+FCG0cHD7J74cOuXjJL81qaUqraH7Rzv+QPZc\nmAvJTHfsx0S5cbLrlD2MFAAAQH+BZecvEolEoVDI5MeKvUqlEggECCEXFxel8r8F6d13362urnZy\ncvryyy+xDYBMJvP5/O7s3Ko3bErP+vKZMGcnp44/fXEYf1+2bOe9htVjxd05mt5gPJnfcGz+YD7f\nzAjmtmJ9XXLqFF0GSSaTaTRa5/vYhR4lBf8IkxeEEJlM5nK5hFm+nkipQQhRKBTIDm5hm522D39N\nLN4rm81my2QysVgsk8lcXV1NG+fOnatWq2k02qNSjQkajUan07t5zB23q13ZtHF+3CftvzpBNHXP\nvXnRLjxm15/S5dJGFpUU6kTt8uyhzrQ9txq63I3JZHbMlj3qUVLwjzB5QQhxuVy1Wq3TEaTHA5FS\ngyA7+IZtdgyG9k2zFi/MQUFBpaWlQ4cOLSsri4+PN20cMGCA6R9SqRTDc5HJZKPRqNVqu9zTaERb\nMypXJ4g62TnSlRnv4/h1etnqBJ8uD3gku/a5UEF3Th3mwsyTtijVrXRKZ63edDq9O0fDv+4nxS4Q\nJi8mOp2OMG+HYKkxGo2QHdyydHYsOFwqPz8/JSUlLi5OIpFs3LhRKBSKRCLLna5HLpY0qrWGiUGd\n9aBGCL2XINp+s7ahpYs/i1r1huO5silh5ucVaceZRRVyaA8eQv8vAAAAZmB/x7xhwwbTP4KDg4OD\ngxFCK1aswPwsffTd9apXYz3MTpzZVrgre5Sf4w83q98b1dmfFGcLGz0c6JFu7E72aStYwMyTqjqZ\nhwQAAEC/1R8nGClpUF+XKOYMcO3Ozm/Fe2+7WSNXd3bTvO9O7ZxoYfcDCBKwC+tbur8/AACA/qM/\nFubdWXXPhQocGd1qLRjgzhkuctx6vepJO9QoWq+UNT0f0a0ybxIkYBVIoTADAAAwo98V5la9cd/d\n2nmDejBb9b8SRdtu1khV5p/z/3Sr5ukgJ2dWDx4KBLmwCmGNKQAAAOb0u8J8Mk/m6cCI8exsfq52\nwlzZTwc6fXGlsuOP5GrdT7drlw/37lEMQQJWUX2L3kCQEYoAAAAw1O8K8547dS8P7PHiTv9K9Dl0\nX5rVYf2J7bdq4kQO3e/2ZSLk0Fg0Srlc09MwAAAAEF7/KsyljepbVYrpEd0a19SWiMdYlSBadrKo\nVf/3SPDiBvV316tXjujZ7bJJoDOrQAaPmQEAALTXvwrznqy6Z0OdHRiUXrz2lRg3Vy791d8KTLVZ\nrTMsOpq/ONZjoEcPWsUfCXKBwgwAAMCMflSYtXrDL3d7045tQiaRdk0Pkat1k3Zlb7hUHv9Dlpcj\n460RXr07WqAzEwozAACAjiw+JSd+nMpvEHJpQ7wcen0ENo28f2bYybz6q+VNHyf5TQzuYuKwTgQ6\ns1KLGnr9cgAAAETVjwrzz7dr5g9y7+NBmFTy9AiXXjylbifAmVnaAJ2/AAAAtNdfmrLzpS13a5V9\nL6hY8eUz65Talp6s9wwAAKA/6C+Fedut6plRQi69N92+LIFNI7tyaKWNMM0IAHZPqzdImjREWToZ\n2F6/aMquV2kPZUsvvDLA1oE8xo/PKG1Qh7n2bAw0AAA/jEb06eXyLRlVZGQMErDXj/Md7c+3dVDA\n7vWLwrwzqy7BjxfgxLR1II/xd2aVNsJjZgDs2IrTRbeqFBmLB3o7Mg5lS1/9reCLiQHPhgpsHRew\nbzYuzBwOlksfUigUCoXS7pgtWv2Pt2p2z4rC9lx9F+TKrVS0PikqGo2Gt4B7x2xS7Bdh8oIQIpFI\nTCaTTqfbOhBsWD815wpk54vlt5cN5zOpCKFFw7lhHvzn92QJeZxxgX2tzWQyGbKDW9hmR6ttvxCD\njQuzUqnE8GgMBoNEIrU75rfXq/34jEGudGzP1XdeHMqV4uYnRcXhcPAWcO+YTYr9IkxeEEJ0Ol2t\nVnf8UrBTVk5Nq97w9u+5/x7jQ9NrlMr/Nn0NdKVtniRecDD74sIB7tw+fWvTaDTIDm5ZOjsE7/zV\nojWkZEjWjPaxdSBm+DkxoCkbADu1J6tOwKZNC28/0GNyiPNzYYIlJ4qgLxjoNYIX5m+vV4e5soeL\nHG0diBn+TqzKplYdrDEFgB3amVm7ONaDRDLzo/Xj/CRNmt13aq0eFCAIIhfmSrnmP9ckG5L8bB2I\nec4sKotKrmyCm2YA7MyNymapSjsxyMnsTxkU0pZk8YcXyyVwdYNeIXJhfv986cwoYTiOxyP5OTHK\nGmAoMwB2ZmdW7ZwBQhrlid+fsV4Os6NcV54ptmZUgDAIW5gP35dmVitXjerNmoxW48NjwKrMANiX\nVr3xZF79nGhh57v9K9GnQNZyKPuhdaICRELMwlwh16w+V5IyWcxj4nqgtg+fWQ79vwCwK2llchGP\n4d/VvAgsGnnzJPHa82V
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -w 9 -h 3 -u in\n",
"m <- prophet(df, yearly.seasonality = 20)\n",
"prophet:::plot_yearly(m)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nuNCCfbUd2F/bftrXXW4
"text/plain": [
"<matplotlib.figure.Figure at 0x7f490bd98cc0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from fbprophet.plot import plot_yearly\n",
"m = Prophet(yearly_seasonality=20).fit(df)\n",
"a = plot_yearly(m)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Increasing the number of Fourier terms allows the seasonality to fit faster changing cycles, but can also lead to overfitting: $N$ Fourier terms corresponds to $2N$ variables used for modeling the cycle\n",
"\n",
"### Specifying Custom Seasonalities\n",
"\n",
"Prophet will by default fit weekly and yearly seasonalities, if the time series is more than two cycles long. It will also fit daily seasonality for a sub-daily time series. You can add other seasonalities (monthly, quarterly, hourly) using the `add_seasonality` method (Python) or function (R).\n",
"\n",
"The inputs to this function are a name, the period of the seasonality in days, and the Fourier order for the seasonality. For reference, by default Prophet uses a Fourier order of 3 for weekly seasonality and 10 for yearly seasonality. An optional input to `add_seasonality` is the prior scale for that seasonal component - this is discussed below.\n",
"\n",
"As an example, here we fit the Peyton Manning data from the Quickstart, but replace the weekly seasonality with monthly seasonality. The monthly seasonality then will appear in the components plot:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Initial log joint probability = -19.4685\n",
"Optimization terminated normally: \n",
" Convergence detected: relative gradient magnitude is below tolerance\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\nlr4r/KCsNu2xrrCdgA5
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -w 9 -h 9 -u in\n",
"m <- prophet(weekly.seasonality=FALSE)\n",
"m <- add_seasonality(m, name='monthly', period=30.5, fourier.order=5)\n",
"m <- fit.prophet(m, df)\n",
"forecast <- predict(m, future)\n",
"prophet_plot_components(m, forecast)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nNl6YviUbY74/i9Kqeqn
"text/plain": [
"<matplotlib.figure.Figure at 0x7f490bf03978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"m = Prophet(weekly_seasonality=False)\n",
"m.add_seasonality(name='monthly', period=30.5, fourier_order=5)\n",
"forecast = m.fit(df).predict(future)\n",
"m.plot_components(forecast);"
]
},
2017-02-22 23:59:43 +00:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Prior scale for holidays and seasonality\n",
2017-09-02 14:26:57 +00:00
"If you find that the holidays are overfitting, you can adjust their prior scale to smooth them using the parameter `holidays_prior_scale`. By default this parameter is 10, which provides very little regularization. Reducing this parameter dampens holiday effects:"
2017-02-22 23:59:43 +00:00
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 17,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
2017-07-11 05:57:13 +00:00
"Initial log joint probability = -19.4685\n",
2017-02-22 23:59:43 +00:00
"Optimization terminated normally: \n",
2018-05-29 22:48:11 +00:00
" Convergence detected: relative gradient magnitude is below tolerance\n",
" ds playoff superbowl\n",
"17 2014-02-02 1.204883 0.9637205\n",
"18 2014-02-03 1.853620 0.9923552\n",
"19 2015-01-11 1.204883 0.0000000\n",
"20 2015-01-12 1.853620 0.0000000\n",
"21 2016-01-17 1.204883 0.0000000\n",
"22 2016-01-18 1.853620 0.0000000\n",
"23 2016-01-24 1.204883 0.0000000\n",
"24 2016-01-25 1.853620 0.0000000\n",
"25 2016-02-07 1.204883 0.9637205\n",
"26 2016-02-08 1.853620 0.9923552\n"
2017-02-22 23:59:43 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R\n",
2017-09-02 14:26:57 +00:00
"m <- prophet(df, holidays = holidays, holidays.prior.scale = 0.05)\n",
2017-02-22 23:59:43 +00:00
"forecast <- predict(m, future)\n",
"forecast %>% \n",
" select(ds, playoff, superbowl) %>% \n",
" filter(abs(playoff + superbowl) > 0) %>%\n",
" tail(10)"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 18,
2017-09-02 20:07:49 +00:00
"metadata": {},
2017-02-22 23:59:43 +00:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
2018-05-29 22:48:11 +00:00
"<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",
2017-02-22 23:59:43 +00:00
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ds</th>\n",
" <th>playoff</th>\n",
" <th>superbowl</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2190</th>\n",
" <td>2014-02-02</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.204883</td>\n",
" <td>0.963720</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2191</th>\n",
" <td>2014-02-03</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.853620</td>\n",
" <td>0.992355</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2532</th>\n",
" <td>2015-01-11</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.204883</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2533</th>\n",
" <td>2015-01-12</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.853620</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2901</th>\n",
" <td>2016-01-17</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.204883</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2902</th>\n",
" <td>2016-01-18</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.853620</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2908</th>\n",
" <td>2016-01-24</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.204883</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2909</th>\n",
" <td>2016-01-25</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.853620</td>\n",
2017-02-22 23:59:43 +00:00
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2922</th>\n",
" <td>2016-02-07</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.204883</td>\n",
" <td>0.963720</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2923</th>\n",
" <td>2016-02-08</td>\n",
2018-05-29 22:48:11 +00:00
" <td>1.853620</td>\n",
" <td>0.992355</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ds playoff superbowl\n",
2018-05-29 22:48:11 +00:00
"2190 2014-02-02 1.204883 0.963720\n",
"2191 2014-02-03 1.853620 0.992355\n",
"2532 2015-01-11 1.204883 0.000000\n",
"2533 2015-01-12 1.853620 0.000000\n",
"2901 2016-01-17 1.204883 0.000000\n",
"2902 2016-01-18 1.853620 0.000000\n",
"2908 2016-01-24 1.204883 0.000000\n",
"2909 2016-01-25 1.853620 0.000000\n",
"2922 2016-02-07 1.204883 0.963720\n",
"2923 2016-02-08 1.853620 0.992355"
2017-02-22 23:59:43 +00:00
]
},
2018-05-29 22:48:11 +00:00
"execution_count": 18,
2017-02-22 23:59:43 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2017-09-02 14:26:57 +00:00
"m = Prophet(holidays=holidays, holidays_prior_scale=0.05).fit(df)\n",
2017-02-22 23:59:43 +00:00
"forecast = m.predict(future)\n",
"forecast[(forecast['playoff'] + forecast['superbowl']).abs() > 0][\n",
" ['ds', 'playoff', 'superbowl']][-10:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2017-09-02 14:26:57 +00:00
"The magnitude of the holiday effect has been reduced compared to before, especially for superbowls, which had the fewest observations. There is a parameter `seasonality_prior_scale` which similarly adjusts the extent to which the seasonality model will fit the data.\n",
"\n",
"Prior scales can be set separately for individual holidays by including a column `prior_scale` in the holidays dataframe. Prior scales for individual seasonalities can be passed as an argument to `add_seasonality`. For instance, the prior scale for just weekly seasonality can be set using:"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 19,
2017-09-02 20:07:49 +00:00
"metadata": {},
"outputs": [],
2017-09-02 14:26:57 +00:00
"source": [
"m = Prophet()\n",
2017-09-02 20:07:49 +00:00
"m.add_seasonality(\n",
" name='weekly', period=7, fourier_order=3, prior_scale=0.1);"
2017-09-02 14:26:57 +00:00
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 20,
2017-09-02 20:07:49 +00:00
"metadata": {},
2017-09-02 14:26:57 +00:00
"outputs": [],
"source": [
"%%R\n",
"m <- prophet()\n",
2017-09-02 20:07:49 +00:00
"m <- add_seasonality(\n",
" m, name='weekly', period=7, fourier.order=3, prior.scale=0.1)"
2017-02-22 23:59:43 +00:00
]
2017-07-21 14:05:16 +00:00
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Additional regressors\n",
"Additional regressors can be added to the linear part of the model using the `add_regressor` method or function. A column with the regressor value will need to be present in both the fitting and prediction dataframes. For example, we can add an additional effect on Sundays during the NFL season. On the components plot, this effect will show up in the 'extra_regressors' plot:"
]
},
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 21,
2017-09-02 14:26:57 +00:00
"metadata": {
2017-09-02 20:07:49 +00:00
"output_hidden": true
2017-09-02 14:26:57 +00:00
},
"outputs": [
{
"data": {
"text/plain": [
"Initial log joint probability = -19.4685\n",
"Optimization terminated normally: \n",
2018-05-29 22:48:11 +00:00
" Convergence detected: relative gradient magnitude is below tolerance\n"
2017-09-02 14:26:57 +00:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2018-05-29 22:48:11 +00:00
"image/png": "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\ngKYpVGhHbLzRI8T1o76
2017-09-02 14:26:57 +00:00
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -w 9 -h 12 -u in\n",
"nfl_sunday <- function(ds) {\n",
" dates <- as.Date(ds)\n",
" month <- as.numeric(format(dates, '%m'))\n",
" as.numeric((weekdays(dates) == \"Sunday\") & (month > 8 | month < 2))\n",
"}\n",
"df$nfl_sunday <- nfl_sunday(df$ds)\n",
"\n",
"m <- prophet()\n",
"m <- add_regressor(m, 'nfl_sunday')\n",
"m <- fit.prophet(m, df)\n",
"\n",
"future$nfl_sunday <- nfl_sunday(future$ds)\n",
"\n",
"forecast <- predict(m, future)\n",
"prophet_plot_components(m, forecast)"
]
},
2017-09-02 20:07:49 +00:00
{
"cell_type": "code",
2018-05-29 22:48:11 +00:00
"execution_count": 22,
2017-09-02 20:07:49 +00:00
"metadata": {},
"outputs": [
{
"data": {
2018-05-29 22:48:11 +00:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAANYCAYAAABU11zVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xd4VGXaBvD7TEvvvYeQhIRUQmiK\ndFCK1KAgiI1FQBcVsbuWVRdYUBClRVaKSLF9ghRXeocQktA7CaRCEtLrlPP9EYhkAWkzcyYz9++6\nckEyJ+95nhOc3L7vKYIoiiKIiIiIyGLIpC6AiIiIiIyLAZCIiIjIwjAAEhEREVkYBkAiIiIiC8MA\nSERERGRhGACJiIiILAwDIBEREZGFYQAkIiIisjAMgEREREQWRiF1Afrm7u6O4OBgo+9XrVZDqVQa\nfb/GZgl9WkKPAPs0J5bQI8A+zYkl9AhI02dWVhaKioruuJ3ZBcDg4GCkpqYafb95eXnw9fU1+n6N\nzRL6tIQeAfZpTiyhR4B9mhNL6BGQps/ExMS72o5LwEREREQWhgGQiIiIyMIwABIRERFZGAZAIiIi\nIgvDAEhEFu1SSTW0OlHqMoiIjIoBkIgs1vy9WQj6dAs6frkLmcXVUpdDRGQ0DIBEZJFm7TiPiT8f\nRZyvI05eqUTMzO1YnHIJosjZQCIyfwyARGRxpm05i8lrT6BnmDu+H9UG6ZO7INzDDs+vPoxBiw+i\npLpe6hKJiAyKAZCILIYoivj4v6fxzoZTeKyVB+YNi0aUtyPCPOxx8NUueLN7S2w4eQWR07dh05lC\nqcslIjIYBkAisgiiKOLdDafw0R9n8HhrL3w9NAbhHg6Nr8tlAqYPaI3tEzvBSilHn4X78fIvR1Gn\n0UpYNRGRYTAAEpHZE0URr605jmlbz2FYjDfmDIlCS3e7W27buYUbTrzRDSPifTF3TxZiZ+7Asfxy\nI1dMRGRYDIBEZNZ0ooiJPx/Fl7syMbKNL2YPjkKw663D33V2VgqsfLotVj+dgMLKerSdtRMztp2D\njreLISIzwQBIRGZLqxMx5b8XsWDfRTyb6I+Zj7eGv7PtXX//E/F+OPFmN7QPdMGb606i27y9yC+v\nNWDFRETGwQBIRGZJo9VhzIp0rD5ejHEdAzG1fyR8nWzueRxvR2vsfOkhzBgQiZTsUkRO34YfMnIN\nUDERkfEwABKR2anX6DBieRpWpOdibBt3fNo3At6O1vc9niAImNI9FIdefQS+jtZ48rs0jFx+CJV1\nGj1WTURkPAyARGRWatVaDFuaip+P5OP1riGY3MkXHvZWehk7yscRGa93xcsPB2N1eh4ip2/Dnsyr\nehmbiMiYGACJyGxU12sw6NuDWHfiMt7uEYr3eoXByUap132oFDJ8NTQGm8Z3hFYnouvcPfjnH6f5\nBBEialYYAInILFTWadB/UQo2nSnEB73D8FaPULjYqgy2v55hHjj5Vnf0CvfAh/89g4HfpnBJmIia\nDQZAImr2ymrUeDR5P3ZdKMYnj7XC691awlnPM3+34mSjxMa/dcA/eoVhw8kraPPFTpwrqjL4fomI\nHhQDIBE1a1er69Fr4T6kXCrFv/pF4pUuIXC0Nnz4u04QBPyzbwR+fa4dCivrkPDFTqw7XmC0/RMR\n3Q8GQCJqtgor69Bz/j4czivHvwdE4qWHg2FvpZCklsejvHHw1Ufg42iFgd8exIe/87xAIjJdDIBE\n1CwVlNei27y9OHm5ErMGRuHFTkGwkyj8XRfmYY/0yV3QN9IT/9x0Bv0XHUBFLc8LJCLTwwBIRM1O\nTmkNus7bi8yr1fhycBRe6BAIW5W04e86W5UC615oj4/6hOOP04WI/2IHzhZWSl0WEVETDIBE1Kxk\nXa1Gl7l7kVtWi6+GROPZ9gGwVsqlLqsJQRDw4aOtsOb59rhaXY+EL3ZizbF8qcsiImrEAEhEzca5\noip0mbsHRVX1mDc0Bk+3DYCVwrTC3436t/bCode6wN/ZBkMWp+L9DSeh0/G8QCKSHgMgETULpy5X\noMvcPSiv1WDBsBiMTPCDSmH6b2EhbnZIm9wFA1p74bMt59D3mwMor1VLXRYRWThJ3z1nzZqFqKgo\nREdHY+TIkaitrW3y+pIlS+Dh4YH4+HjEx8dj0aJFElVKRFI6ml+OrvP2ol6jQ/LwWDwR7wul3PTD\n33U2SjnWPN8OnzzWClvOFiL+8x04fYXnBRKRdCR7B83NzcWcOXOQmpqKY8eOQavVYtWqVTdt9+ST\nTyIjIwMZGRkYO3asBJUSkZTSckrRbd5eAEDy8FgMi/WFohmFv+sEQcD7vcOx7oX2KK3RoO2snfjl\nCM8LJCJpSPouqtFoUFNTA41Gg+rqavj6+kpZDhGZmAMXS9Bj/j5YyWVIHh6LQdE+kMsEqct6II9F\nNpwXGOhsg2FLU/HOep4XSETGJ9l9E/z8/DBlyhQEBgbCxsYGffr0QZ8+fW7a7ueff8bOnTsRHh6O\nWbNmISAg4KZtkpOTkZycDAAoKChAXl6ewev/X4WFhUbfpxQsoU9L6BEw/T4P5FTg6V/OwclKjhm9\nfJHoosPlgnufMTPFPq0A/DYiDH/fcAHTtp7D3nOXsXBgSzha3d8FLabYoyGwT/NhCT0Cpt2nIEp0\nq/qSkhIMGzYMq1evhrOzM4YPH46kpCSMHj26cZvi4mLY29vDysoKCxcuxOrVq7F169a/HDcxMRGp\nqamGLv8meXl5FjGDaQl9WkKPgGn3ueVMIQZ+exCe9irMHxaDRyM8IQj3N/Nnyn2KoohpW8/hH7+f\nhr+TNTaMbY/W3o73PI4p96hP7NN8WEKPgDR93m0OkmwJePPmzWjRogU8PDygVCoxdOhQ7N27t8k2\nbm5usLKyAgCMHTsWhw4dkqJUIjKijScvo/9/UuDjaIWFSbEPFP5MnSAIeKdnGDaObY+KOg3azd6N\nnw4bfwWDiCyPZAEwMDAQ+/fvR3V1NURRxJYtWxAZGdlkm/z8P5d71q5de9PrRGRe1hwrwKDFBxHs\nYoOFSbHo3crDbMPfjXq38kTaa13QwtUWw5cdwhu/neB5gURkUJIFwA4dOiApKQkJCQmIiYmBTqfD\nuHHj8MEHH2Dt2rUAgDlz5iAqKgpxcXGYM2cOlixZIlW5RGRgP2TkIWlpKlp52GPBsFj0DLeM8Hdd\nkKstUl97BENjvDFz+3n0WrAPpTW8XyARGYZk5wAaCs8BNCxL6NMSegRMq8/vUrPx7KoMxPo4Yvag\nKHQNddfb2KbU590QRREzt53HuxtPwcfRChvGdkC0z1+fF9jcerxf7NN8WEKPAM8BJCK6rUX7L+KZ\nVRlo6++Er4ZE6zX8NUeCIOCNHqH4/W8dUF2vRfsvd2F1eq7UZRGRmWEAJCLJzN2dib/9eASdAl3w\n1ZBodA5xk7okk9Ez3AMZk7si1M0OI5anYfKa49DyvEAi0hMGQCKSxOfbz+Pl/zuGLiGu+GpINDoE\nuUpdksnxd7HBwdcewfA4H8zaeQE95+9DSXW91GURkRlgACQio/ts8xlM+e0EeoW54+sh0UgIcJa6\nJJNlpZDjhzGJmPl4a+zJuorYmTtwNK9M6rKIqJljACQioxFFEf/YeArvbzyNvhGemDMkCjG+TlKX\n1Sy83q0lNr3YEbUaHTrM2Y2VaTwvkIjuHwMgERmFKIp4c91JfLr5LAZFeeHLwVGI9Lr3p15Ysm6h\n7siY3AVh7vZ46vs0vPrrMZ4XSET3hQGQiAxOpxMx6f+OYeb28xge64NZg6IQ5mEvdVnNkp+zDQ6+\n+ghGtvHFl7sy0X3eXpTUaKQuyyDKatQwszuVEZkMhdQFEJF50+lEjP/5CL7ZfwmjEvwwtV8EAlxs\npS6rWVMpZFgxui3aBzjjzfUn0WtZBTaOc0K8X/NdTi+vVSM1uwwpl0qQkl2KAxdLkFdeh7b+Tvis\nbwT6tPKQukQis8IASEQ
2017-09-02 20:07:49 +00:00
"text/plain": [
2018-05-29 22:48:11 +00:00
"<matplotlib.figure.Figure at 0x7f490a9a70b8>"
2017-09-02 20:07:49 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def nfl_sunday(ds):\n",
" date = pd.to_datetime(ds)\n",
" if date.weekday() == 6 and (date.month > 8 or date.month < 2):\n",
" return 1\n",
" else:\n",
" return 0\n",
"df['nfl_sunday'] = df['ds'].apply(nfl_sunday)\n",
"\n",
"m = Prophet()\n",
"m.add_regressor('nfl_sunday')\n",
"m.fit(df)\n",
"\n",
"future['nfl_sunday'] = future['ds'].apply(nfl_sunday)\n",
"\n",
"forecast = m.predict(future)\n",
"m.plot_components(forecast);"
]
},
2017-07-21 14:05:16 +00:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2017-11-08 18:09:08 +00:00
"NFL Sundays could also have been handled using the \"holidays\" interface described above, by creating a list of past and future NFL Sundays. The `add_regressor` function provides a more general interface for defining extra linear regressors, and in particular does not require that the regressor be a binary indicator. Another time series could be used as a regressor, although its future values would have to be known. The regressor cannot be constant in the training data; fitting will exit with an error if it is.\n",
2017-07-21 14:05:16 +00:00
"\n",
2017-09-02 14:26:57 +00:00
"The `add_regressor` function has optional arguments for specifying the prior scale (holiday prior scale is used by default) and whether or not the regressor is standardized - see the docstring with `help(Prophet.add_regressor)` in Python and `?add_regressor` in R."
2017-07-21 14:05:16 +00:00
]
2017-02-22 23:59:43 +00:00
}
],
"metadata": {
"kernelspec": {
2018-05-29 22:48:11 +00:00
"display_name": "Python 3",
2017-02-22 23:59:43 +00:00
"language": "python",
2018-05-29 22:48:11 +00:00
"name": "python3"
2017-02-22 23:59:43 +00:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
2018-05-29 22:48:11 +00:00
"version": 3
2017-02-22 23:59:43 +00:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
2018-05-29 22:48:11 +00:00
"pygments_lexer": "ipython3",
"version": "3.5.3"
2017-02-22 23:59:43 +00:00
}
},
"nbformat": 4,
2017-07-05 08:20:22 +00:00
"nbformat_minor": 1
2017-02-22 23:59:43 +00:00
}