2017-02-22 23:59:43 +00:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
2017-07-05 08:20:22 +00:00
"block_hidden": true
2017-02-22 23:59:43 +00:00
},
2017-07-05 08:20:22 +00:00
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:fbprophet.forecaster:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n"
]
}
],
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",
"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-07-05 08:20:22 +00:00
"block_hidden": true
2017-02-22 23:59:43 +00:00
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
2017-07-05 08:20:22 +00:00
"/usr/local/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: Loading required package: Rcpp\n",
2017-02-22 23:59:43 +00:00
"\n",
" warnings.warn(x, RRuntimeWarning)\n"
]
},
{
"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)"
]
},
2017-07-05 08:20:22 +00:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Specifying 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 number of Fourier terms for the seasonality. 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. For reference, by default Prophet uses 3 terms for weekly seasonality and 10 for yearly seasonality.\n",
"\n",
"As an example, here we fit the Peyton Manning data from the Quickstart, but replace the weekly seasonality with monthly seasonality:"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 3,
2017-07-05 08:20:22 +00:00
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:fbprophet.forecaster:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n"
]
},
{
"data": {
2017-07-11 05:57:13 +00:00
"image/png": "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\n7MOCEQ1L9029NnNLEUU
2017-07-05 08:20:22 +00:00
"text/plain": [
2017-07-11 05:57:13 +00:00
"<matplotlib.figure.Figure at 0x7ff98c6c0050>"
2017-07-05 08:20:22 +00:00
]
},
"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);"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 4,
2017-07-05 08:20:22 +00:00
"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": {
2017-07-11 05:57:13 +00:00
"image/png": "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\nIqZrYS+pgFoxMvr7C6U
2017-07-05 08:20:22 +00:00
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2017-07-11 05:57:13 +00:00
"%%R -w 9 -h 9 -u in\n",
2017-07-05 08:20:22 +00:00
"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)"
]
},
2017-02-22 23:59:43 +00:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Modeling Holidays\n",
"If you have holidays 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",
"\n",
"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`.\n",
"\n",
"Here we create a dataframe that includes the dates of all of Peyton Manning's playoff appearances:"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 5,
2017-02-22 23:59:43 +00:00
"metadata": {
"collapsed": true
},
"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",
2017-07-11 05:57:13 +00:00
"execution_count": 6,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
2017-07-11 05:57:13 +00:00
"/usr/local/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: \n",
2017-02-22 23:59:43 +00:00
"Attaching package: ‘ dplyr’ \n",
"\n",
"\n",
" warnings.warn(x, RRuntimeWarning)\n",
2017-07-11 05:57:13 +00:00
"/usr/local/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: The following objects are masked from ‘ package:stats’ :\n",
2017-02-22 23:59:43 +00:00
"\n",
" filter, lag\n",
"\n",
"\n",
" warnings.warn(x, RRuntimeWarning)\n",
2017-07-11 05:57:13 +00:00
"/usr/local/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: The following objects are masked from ‘ package:base’ :\n",
2017-02-22 23:59:43 +00:00
"\n",
" intersect, setdiff, setequal, union\n",
"\n",
"\n",
" warnings.warn(x, RRuntimeWarning)\n"
]
}
],
"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",
2017-07-11 05:57:13 +00:00
"execution_count": 7,
2017-07-05 08:20:22 +00:00
"metadata": {},
2017-07-11 05:57:13 +00:00
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:fbprophet.forecaster:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n"
]
}
],
2017-02-22 23:59:43 +00:00
"source": [
"m = Prophet(holidays=holidays)\n",
"forecast = m.fit(df).predict(future)"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 8,
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",
2017-07-11 05:57:13 +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",
2017-07-11 05:57:13 +00:00
"execution_count": 9,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"data": {
"text/plain": [
" ds playoff superbowl\n",
2017-07-11 05:57:13 +00:00
"17 2014-02-02 1.227333 1.190688\n",
"18 2014-02-03 1.902392 1.468285\n",
"19 2015-01-11 1.227333 0.000000\n",
"20 2015-01-12 1.902392 0.000000\n",
"21 2016-01-17 1.227333 0.000000\n",
"22 2016-01-18 1.902392 0.000000\n",
"23 2016-01-24 1.227333 0.000000\n",
"24 2016-01-25 1.902392 0.000000\n",
"25 2016-02-07 1.227333 1.190688\n",
"26 2016-02-08 1.902392 1.468285\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",
2017-07-11 05:57:13 +00:00
"execution_count": 10,
2017-07-05 08:20:22 +00:00
"metadata": {},
2017-02-22 23:59:43 +00:00
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<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",
2017-07-11 05:57:13 +00:00
" <td>1.223214</td>\n",
" <td>1.213315</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2191</th>\n",
" <td>2014-02-03</td>\n",
2017-07-11 05:57:13 +00:00
" <td>1.906370</td>\n",
" <td>1.412192</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2532</th>\n",
" <td>2015-01-11</td>\n",
2017-07-11 05:57:13 +00:00
" <td>1.223214</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",
2017-07-11 05:57:13 +00:00
" <td>1.906370</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",
2017-07-11 05:57:13 +00:00
" <td>1.223214</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",
2017-07-11 05:57:13 +00:00
" <td>1.906370</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",
2017-07-11 05:57:13 +00:00
" <td>1.223214</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",
2017-07-11 05:57:13 +00:00
" <td>1.906370</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",
2017-07-11 05:57:13 +00:00
" <td>1.223214</td>\n",
" <td>1.213315</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2923</th>\n",
" <td>2016-02-08</td>\n",
2017-07-11 05:57:13 +00:00
" <td>1.906370</td>\n",
" <td>1.412192</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ds playoff superbowl\n",
2017-07-11 05:57:13 +00:00
"2190 2014-02-02 1.223214 1.213315\n",
"2191 2014-02-03 1.906370 1.412192\n",
"2532 2015-01-11 1.223214 0.000000\n",
"2533 2015-01-12 1.906370 0.000000\n",
"2901 2016-01-17 1.223214 0.000000\n",
"2902 2016-01-18 1.906370 0.000000\n",
"2908 2016-01-24 1.223214 0.000000\n",
"2909 2016-01-25 1.906370 0.000000\n",
"2922 2016-02-07 1.223214 1.213315\n",
"2923 2016-02-08 1.906370 1.412192"
2017-02-22 23:59:43 +00:00
]
},
2017-07-11 05:57:13 +00:00
"execution_count": 10,
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",
2017-07-11 05:57:13 +00:00
"execution_count": 11,
2017-02-22 23:59:43 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"data": {
2017-07-11 05:57:13 +00:00
"image/png": "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\nEumF7Bk94W1vgRGf78H
2017-02-22 23:59:43 +00:00
"text/plain": [
2017-07-11 05:57:13 +00:00
"<matplotlib.figure.Figure at 0x7ff98c737650>"
2017-02-22 23:59:43 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"m.plot_components(forecast);"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 12,
2017-07-05 08:20:22 +00:00
"metadata": {},
2017-02-22 23:59:43 +00:00
"outputs": [
{
"data": {
2017-07-11 05:57:13 +00:00
"image/png": "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\nXa5ok6jox52u9BwpdR4
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);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Prior scale for holidays and seasonality\n",
"If you find that the holidays are overfitting, you can adjust their prior scale to smooth them using the parameter `holidays_prior_scale`, which by default is 10:"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 13,
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",
" Convergence detected: relative gradient magnitude is below tolerance\n",
2017-07-11 05:57:13 +00:00
" ds playoff superbowl\n",
"17 2014-02-02 1.315141 0.7989651\n",
"18 2014-02-03 1.987399 0.6608394\n",
"19 2015-01-11 1.315141 0.0000000\n",
"20 2015-01-12 1.987399 0.0000000\n",
"21 2016-01-17 1.315141 0.0000000\n",
"22 2016-01-18 1.987399 0.0000000\n",
"23 2016-01-24 1.315141 0.0000000\n",
"24 2016-01-25 1.987399 0.0000000\n",
"25 2016-02-07 1.315141 0.7989651\n",
"26 2016-02-08 1.987399 0.6608394\n"
2017-02-22 23:59:43 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R\n",
"m <- prophet(df, holidays = holidays, holidays.prior.scale = 1)\n",
"forecast <- predict(m, future)\n",
"forecast %>% \n",
" select(ds, playoff, superbowl) %>% \n",
" filter(abs(playoff + superbowl) > 0) %>%\n",
" tail(10)"
]
},
{
"cell_type": "code",
2017-07-11 05:57:13 +00:00
"execution_count": 14,
2017-07-05 08:20:22 +00:00
"metadata": {},
2017-02-22 23:59:43 +00:00
"outputs": [
2017-07-11 05:57:13 +00:00
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:fbprophet.forecaster:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.\n"
]
},
2017-02-22 23:59:43 +00:00
{
"data": {
"text/html": [
"<div>\n",
"<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",
2017-07-11 05:57:13 +00:00
" <td>1.330950</td>\n",
" <td>0.703795</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2191</th>\n",
" <td>2014-02-03</td>\n",
2017-07-11 05:57:13 +00:00
" <td>1.991491</td>\n",
" <td>0.557307</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2532</th>\n",
" <td>2015-01-11</td>\n",
2017-07-11 05:57:13 +00:00
" <td>1.330950</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",
2017-07-11 05:57:13 +00:00
" <td>1.991491</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",
2017-07-11 05:57:13 +00:00
" <td>1.330950</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",
2017-07-11 05:57:13 +00:00
" <td>1.991491</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",
2017-07-11 05:57:13 +00:00
" <td>1.330950</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",
2017-07-11 05:57:13 +00:00
" <td>1.991491</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",
2017-07-11 05:57:13 +00:00
" <td>1.330950</td>\n",
" <td>0.703795</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" <tr>\n",
" <th>2923</th>\n",
" <td>2016-02-08</td>\n",
2017-07-11 05:57:13 +00:00
" <td>1.991491</td>\n",
" <td>0.557307</td>\n",
2017-02-22 23:59:43 +00:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ds playoff superbowl\n",
2017-07-11 05:57:13 +00:00
"2190 2014-02-02 1.330950 0.703795\n",
"2191 2014-02-03 1.991491 0.557307\n",
"2532 2015-01-11 1.330950 0.000000\n",
"2533 2015-01-12 1.991491 0.000000\n",
"2901 2016-01-17 1.330950 0.000000\n",
"2902 2016-01-18 1.991491 0.000000\n",
"2908 2016-01-24 1.330950 0.000000\n",
"2909 2016-01-25 1.991491 0.000000\n",
"2922 2016-02-07 1.330950 0.703795\n",
"2923 2016-02-08 1.991491 0.557307"
2017-02-22 23:59:43 +00:00
]
},
2017-07-11 05:57:13 +00:00
"execution_count": 14,
2017-02-22 23:59:43 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = Prophet(holidays=holidays, holidays_prior_scale=1).fit(df)\n",
"forecast = m.predict(future)\n",
"forecast[(forecast['playoff'] + forecast['superbowl']).abs() > 0][\n",
" ['ds', 'playoff', 'superbowl']][-10:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
2017-07-05 08:20:22 +00:00
"nbformat_minor": 1
2017-02-22 23:59:43 +00:00
}