mirror of
https://github.com/saymrwulf/prophet.git
synced 2026-06-06 00:03:25 +00:00
613 lines
398 KiB
Text
613 lines
398 KiB
Text
|
|
{
|
|||
|
|
"cells": [
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 1,
|
|||
|
|
"metadata": {
|
|||
|
|
"block_hidden": true,
|
|||
|
|
"collapsed": true
|
|||
|
|
},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"%load_ext rpy2.ipython\n",
|
|||
|
|
"%matplotlib inline"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## Python API\n",
|
|||
|
|
"\n",
|
|||
|
|
"Prophet follows the `sklearn` model API. We create an instance of the `Prophet` class and then call its `fit` and `predict` methods. "
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"The input to Prophet is always a dataframe with two columns: `ds` and `y`. The `ds` (datestamp) column must contain a date or datetime (either is fine). The `y` column must be numeric, and represents the measurement we wish to forecast.\n",
|
|||
|
|
"\n",
|
|||
|
|
"As an example, let's look at a time series of daily page views for the Wikipedia page for [Peyton Manning](https://en.wikipedia.org/wiki/Peyton_Manning). We scraped this data using the [Wikipediatrend](https://cran.r-project.org/web/packages/wikipediatrend/vignettes/using-wikipediatrend.html) package in R. Peyton Manning provides a nice example because it illustrates some of Prophet's features, like multiple seasonality, changing growth rates, and the ability to model special days (such as Manning's playoff and superbowl appearances).\n",
|
|||
|
|
"\n",
|
|||
|
|
"First we'll import the data and log-transform the y variable."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 2,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": true
|
|||
|
|
},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"import pandas as pd\n",
|
|||
|
|
"import numpy as np\n",
|
|||
|
|
"from fbprophet import Prophet"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 3,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"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>y</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>0</th>\n",
|
|||
|
|
" <td>2007-12-10</td>\n",
|
|||
|
|
" <td>9.590761</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>1</th>\n",
|
|||
|
|
" <td>2007-12-11</td>\n",
|
|||
|
|
" <td>8.519590</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>2</th>\n",
|
|||
|
|
" <td>2007-12-12</td>\n",
|
|||
|
|
" <td>8.183677</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3</th>\n",
|
|||
|
|
" <td>2007-12-13</td>\n",
|
|||
|
|
" <td>8.072467</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>4</th>\n",
|
|||
|
|
" <td>2007-12-14</td>\n",
|
|||
|
|
" <td>7.893572</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" ds y\n",
|
|||
|
|
"0 2007-12-10 9.590761\n",
|
|||
|
|
"1 2007-12-11 8.519590\n",
|
|||
|
|
"2 2007-12-12 8.183677\n",
|
|||
|
|
"3 2007-12-13 8.072467\n",
|
|||
|
|
"4 2007-12-14 7.893572"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"execution_count": 3,
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "execute_result"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"df = pd.read_csv('../examples/example_wp_peyton_manning.csv')\n",
|
|||
|
|
"df['y'] = np.log(df['y'])\n",
|
|||
|
|
"df.head()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"We fit the model by instantiated a new `Prophet` object. Any settings to the forecasting procedure are passed into the constructor. Then you call its `fit` method and pass in the historical dataframe. Fitting should take 1-5 seconds."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 4,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"m = Prophet()\n",
|
|||
|
|
"m.fit(df);"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"Predictions are then made on a dataframe with a column `ds` containing the dates for which a prediction is to be made. You can get a suitable dataframe that extends into the future a specified number of days using the helper method `Prophet.make_future_dataframe`. By default it will also include the dates from the history, so we will see the model fit as well. "
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 5,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"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",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3265</th>\n",
|
|||
|
|
" <td>2017-01-15</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3266</th>\n",
|
|||
|
|
" <td>2017-01-16</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3267</th>\n",
|
|||
|
|
" <td>2017-01-17</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3268</th>\n",
|
|||
|
|
" <td>2017-01-18</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3269</th>\n",
|
|||
|
|
" <td>2017-01-19</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" ds\n",
|
|||
|
|
"3265 2017-01-15\n",
|
|||
|
|
"3266 2017-01-16\n",
|
|||
|
|
"3267 2017-01-17\n",
|
|||
|
|
"3268 2017-01-18\n",
|
|||
|
|
"3269 2017-01-19"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"execution_count": 5,
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "execute_result"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"future = m.make_future_dataframe(periods=365)\n",
|
|||
|
|
"future.tail()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"The `predict` method will assign each row in `future` a predicted value which it names `yhat`. If you pass in historical dates, it will provide an in-sample fit. The `forecast` object here is a new dataframe that includes a column `yhat` with the forecast, as well as columns for components and uncertainty intervals."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 6,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"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>yhat</th>\n",
|
|||
|
|
" <th>yhat_lower</th>\n",
|
|||
|
|
" <th>yhat_upper</th>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </thead>\n",
|
|||
|
|
" <tbody>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3265</th>\n",
|
|||
|
|
" <td>2017-01-15</td>\n",
|
|||
|
|
" <td>8.205065</td>\n",
|
|||
|
|
" <td>7.480528</td>\n",
|
|||
|
|
" <td>8.889085</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3266</th>\n",
|
|||
|
|
" <td>2017-01-16</td>\n",
|
|||
|
|
" <td>8.530088</td>\n",
|
|||
|
|
" <td>7.805730</td>\n",
|
|||
|
|
" <td>9.296309</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3267</th>\n",
|
|||
|
|
" <td>2017-01-17</td>\n",
|
|||
|
|
" <td>8.317468</td>\n",
|
|||
|
|
" <td>7.576534</td>\n",
|
|||
|
|
" <td>9.060808</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3268</th>\n",
|
|||
|
|
" <td>2017-01-18</td>\n",
|
|||
|
|
" <td>8.150081</td>\n",
|
|||
|
|
" <td>7.440242</td>\n",
|
|||
|
|
" <td>8.906296</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" <tr>\n",
|
|||
|
|
" <th>3269</th>\n",
|
|||
|
|
" <td>2017-01-19</td>\n",
|
|||
|
|
" <td>8.162015</td>\n",
|
|||
|
|
" <td>7.433653</td>\n",
|
|||
|
|
" <td>8.902665</td>\n",
|
|||
|
|
" </tr>\n",
|
|||
|
|
" </tbody>\n",
|
|||
|
|
"</table>\n",
|
|||
|
|
"</div>"
|
|||
|
|
],
|
|||
|
|
"text/plain": [
|
|||
|
|
" ds yhat yhat_lower yhat_upper\n",
|
|||
|
|
"3265 2017-01-15 8.205065 7.480528 8.889085\n",
|
|||
|
|
"3266 2017-01-16 8.530088 7.805730 9.296309\n",
|
|||
|
|
"3267 2017-01-17 8.317468 7.576534 9.060808\n",
|
|||
|
|
"3268 2017-01-18 8.150081 7.440242 8.906296\n",
|
|||
|
|
"3269 2017-01-19 8.162015 7.433653 8.902665"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"execution_count": 6,
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "execute_result"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"forecast = m.predict(future)\n",
|
|||
|
|
"forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"You can plot the forecast by calling the `Prophet.plot` method and passing in your forecast dataframe."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 7,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/png": "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\nQWBbEh4soSHqPhgktwH
|
|||
|
|
"text/plain": [
|
|||
|
|
"<matplotlib.figure.Figure at 0x7ff232b2e510>"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"m.plot(forecast);"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"If you want to see the forecast components, you can use the `Prophet.plot_components` method. By default you'll see the trend, yearly seasonality, and weekly seasonality of the time series. If you include holidays, you'll see those here, too."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 8,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/png": "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\newbiLu/A+tHN0cTJSiP
|
|||
|
|
"text/plain": [
|
|||
|
|
"<matplotlib.figure.Figure at 0x7ff23279a850>"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"m.plot_components(forecast);"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"## R API\n",
|
|||
|
|
"\n",
|
|||
|
|
"In R, we use the normal model fitting API. We provide a `prophet` function that performs fitting and returns a model object. You can then call `predict` and `plot` on this model object."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 9,
|
|||
|
|
"metadata": {
|
|||
|
|
"output_hidden": true,
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"name": "stderr",
|
|||
|
|
"output_type": "stream",
|
|||
|
|
"text": [
|
|||
|
|
"/usr/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: Loading required package: Rcpp\n",
|
|||
|
|
"\n",
|
|||
|
|
" warnings.warn(x, RRuntimeWarning)\n",
|
|||
|
|
"/usr/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: \n",
|
|||
|
|
"Attaching package: ‘dplyr’\n",
|
|||
|
|
"\n",
|
|||
|
|
"\n",
|
|||
|
|
" warnings.warn(x, RRuntimeWarning)\n",
|
|||
|
|
"/usr/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: The following objects are masked from ‘package:stats’:\n",
|
|||
|
|
"\n",
|
|||
|
|
" filter, lag\n",
|
|||
|
|
"\n",
|
|||
|
|
"\n",
|
|||
|
|
" warnings.warn(x, RRuntimeWarning)\n",
|
|||
|
|
"/usr/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py:186: RRuntimeWarning: The following objects are masked from ‘package:base’:\n",
|
|||
|
|
"\n",
|
|||
|
|
" intersect, setdiff, setequal, union\n",
|
|||
|
|
"\n",
|
|||
|
|
"\n",
|
|||
|
|
" warnings.warn(x, RRuntimeWarning)\n"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"%%R\n",
|
|||
|
|
"library(prophet)\n",
|
|||
|
|
"library(dplyr)"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"First we read in the data and create the outcome variable. As in the Python API, this is a dataframe with columns `ds` and `y`, containing the date and numeric value respectively. As above, we use here the log number of views to Petyon Manning's Wikipedia page."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 10,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [],
|
|||
|
|
"source": [
|
|||
|
|
"%%R\n",
|
|||
|
|
"df <- read.csv('../examples/example_wp_peyton_manning.csv') %>%\n",
|
|||
|
|
" mutate(y = log(y))"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"We call the `prophet` function to fit the model. The first argument is the historical dataframe. Additional arguments control how Prophet fits the data and are described in later pages of this documentation."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 11,
|
|||
|
|
"metadata": {
|
|||
|
|
"output_hidden": true,
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/plain": [
|
|||
|
|
"STAN OPTIMIZATION COMMAND (LBFGS)\n",
|
|||
|
|
"init = user\n",
|
|||
|
|
"save_iterations = 1\n",
|
|||
|
|
"init_alpha = 0.001\n",
|
|||
|
|
"tol_obj = 1e-12\n",
|
|||
|
|
"tol_grad = 1e-08\n",
|
|||
|
|
"tol_param = 1e-08\n",
|
|||
|
|
"tol_rel_obj = 10000\n",
|
|||
|
|
"tol_rel_grad = 1e+07\n",
|
|||
|
|
"history_size = 5\n",
|
|||
|
|
"seed = 771875600\n",
|
|||
|
|
"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"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"%%R\n",
|
|||
|
|
"m <- prophet(df)"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"Predictions are made on a dataframe with a column `ds` containing the dates for which predictions are to be made. The `make_future_dataframe` function takes the model object and a number of periods to forecast and produces a suitable dataframe. By default it will also include the historical dates so we can evaluate in-sample fit."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 12,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/plain": [
|
|||
|
|
" ds\n",
|
|||
|
|
"3264 2017-01-13\n",
|
|||
|
|
"3265 2017-01-14\n",
|
|||
|
|
"3266 2017-01-15\n",
|
|||
|
|
"3267 2017-01-16\n",
|
|||
|
|
"3268 2017-01-17\n",
|
|||
|
|
"3269 2017-01-18\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"%%R\n",
|
|||
|
|
"future <- make_future_dataframe(m, periods = 365)\n",
|
|||
|
|
"tail(future)"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"As with most modeling procedures in R, we use the generic `predict` function to get our forecast. The `forecast` object is a dataframe with a column `yhat` containing the forecast. It has additional columns for uncertainty intervals and seasonal components."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 13,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"text/plain": [
|
|||
|
|
" ds yhat yhat_lower yhat_upper\n",
|
|||
|
|
"3264 2017-01-13 8.052054 7.332958 8.698754\n",
|
|||
|
|
"3265 2017-01-14 7.832396 7.077789 8.578120\n",
|
|||
|
|
"3266 2017-01-15 8.214232 7.397416 8.922169\n",
|
|||
|
|
"3267 2017-01-16 8.539239 7.786306 9.239885\n",
|
|||
|
|
"3268 2017-01-17 8.326654 7.562416 9.042217\n",
|
|||
|
|
"3269 2017-01-18 8.159337 7.449771 8.869469\n"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"%%R\n",
|
|||
|
|
"forecast <- predict(m, future)\n",
|
|||
|
|
"tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"You can use the generic `plot` function to plot the forecast, by passing in the model and the forecast dataframe."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 14,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/png": "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\n7ufnx7R9fHw+f/5cq1Y
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"%%R -w 10 -h 6 -u in\n",
|
|||
|
|
"plot(m, forecast)"
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "markdown",
|
|||
|
|
"metadata": {},
|
|||
|
|
"source": [
|
|||
|
|
"You can use the `prophet_plot_components` function to see the forecast broken down into trend, weekly seasonality, and yearly seasonality."
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"cell_type": "code",
|
|||
|
|
"execution_count": 15,
|
|||
|
|
"metadata": {
|
|||
|
|
"collapsed": false
|
|||
|
|
},
|
|||
|
|
"outputs": [
|
|||
|
|
{
|
|||
|
|
"data": {
|
|||
|
|
"image/png": "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\noZ+cmhLjPq+nD36bwDo
|
|||
|
|
},
|
|||
|
|
"metadata": {},
|
|||
|
|
"output_type": "display_data"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"source": [
|
|||
|
|
"%%R -w 9 -h 9 -u in\n",
|
|||
|
|
"prophet_plot_components(m, forecast)"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"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,
|
|||
|
|
"nbformat_minor": 0
|
|||
|
|
}
|