2017-09-02 18:05:51 +00:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
2020-05-15 04:40:40 +00:00
"block_hidden": true
2017-09-02 18:05:51 +00:00
},
2021-03-21 21:13:50 +00:00
"outputs": [],
2017-09-02 18:05:51 +00:00
"source": [
"%load_ext rpy2.ipython\n",
"%matplotlib inline\n",
2021-03-21 21:13:50 +00:00
"from prophet import Prophet\n",
2017-09-02 18:05:51 +00:00
"import pandas as pd\n",
"import logging\n",
2021-03-21 21:13:50 +00:00
"logging.getLogger('prophet').setLevel(logging.ERROR)\n",
2017-09-02 18:05:51 +00:00
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
2020-05-15 04:45:03 +00:00
"block_hidden": true
2017-09-02 18:05:51 +00:00
},
2020-05-15 04:45:03 +00:00
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"R[write to console]: Loading required package: Rcpp\n",
"\n",
"R[write to console]: Loading required package: rlang\n",
"\n"
]
}
],
2017-09-02 18:05:51 +00:00
"source": [
"%%R\n",
"library(prophet)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Forecasting Growth\n",
"\n",
"By default, Prophet uses a linear model for its forecast. When forecasting growth, there is usually some maximum achievable point: total market size, total population size, etc. This is called the carrying capacity, and the forecast should saturate at this point.\n",
"\n",
"Prophet allows you to make forecasts using a [logistic growth](https://en.wikipedia.org/wiki/Logistic_function) trend model, with a specified carrying capacity. We illustrate this with the log number of page visits to the [R (programming language)](https://en.wikipedia.org/wiki/R_%28programming_language%29) page on Wikipedia:"
]
},
{
"cell_type": "code",
"execution_count": 3,
2021-03-21 21:13:50 +00:00
"metadata": {},
2017-09-02 18:05:51 +00:00
"outputs": [],
"source": [
2018-05-31 01:47:16 +00:00
"%%R\n",
"df <- read.csv('../examples/example_wp_log_R.csv')"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 2,
"metadata": {},
2017-09-02 18:05:51 +00:00
"outputs": [],
"source": [
2018-05-31 01:47:16 +00:00
"df = pd.read_csv('../examples/example_wp_log_R.csv')"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We must specify the carrying capacity in a column `cap`. Here we will assume a particular value, but this would usually be set using data or expertise about the market size."
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 4,
"metadata": {},
2017-09-02 18:05:51 +00:00
"outputs": [],
"source": [
2018-05-31 01:47:16 +00:00
"%%R\n",
"df$cap <- 8.5"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 3,
"metadata": {},
2017-09-02 18:05:51 +00:00
"outputs": [],
"source": [
2018-05-31 01:47:16 +00:00
"df['cap'] = 8.5"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The important things to note are that `cap` must be specified for every row in the dataframe, and that it does not have to be constant. If the market size is growing, then `cap` can be an increasing sequence.\n",
"\n",
"We then fit the model as before, except pass in an additional argument to specify logistic growth:"
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 5,
2017-09-02 18:05:51 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
2021-03-21 21:13:50 +00:00
"name": "stderr",
"output_type": "stream",
"text": [
"R[write to console]: Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.\n",
"\n"
]
2017-09-02 18:05:51 +00:00
}
],
"source": [
2018-05-31 01:47:16 +00:00
"%%R\n",
"m <- prophet(df, growth = 'logistic')"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 4,
2017-09-02 18:05:51 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
2021-03-21 21:13:50 +00:00
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:numexpr.utils:NumExpr defaulting to 8 threads.\n"
]
},
2017-09-02 18:05:51 +00:00
{
"data": {
"text/plain": [
2021-03-21 21:13:50 +00:00
"<prophet.forecaster.Prophet at 0x7f14440461f0>"
2017-09-02 18:05:51 +00:00
]
},
2021-03-21 21:13:50 +00:00
"execution_count": 4,
2017-09-02 18:05:51 +00:00
"metadata": {},
2018-05-31 01:47:16 +00:00
"output_type": "execute_result"
2017-09-02 18:05:51 +00:00
}
],
"source": [
2018-05-31 01:47:16 +00:00
"m = Prophet(growth='logistic')\n",
"m.fit(df)"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2020-02-03 21:12:54 +00:00
"We make a dataframe for future predictions as before, except we must also specify the capacity in the future. Here we keep capacity constant at the same value as in the history, and forecast 5 years into the future:"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 6,
2017-09-02 18:05:51 +00:00
"metadata": {
"output_hidden": true
},
"outputs": [
{
"data": {
2021-03-21 21:13:50 +00:00
"image/png": "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
2017-09-02 18:05:51 +00:00
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -w 10 -h 6 -u in\n",
"future <- make_future_dataframe(m, periods = 1826)\n",
"future$cap <- 8.5\n",
"fcst <- predict(m, future)\n",
2018-05-31 01:47:16 +00:00
"plot(m, fcst)"
2017-09-02 18:05:51 +00:00
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 5,
2017-09-02 18:05:51 +00:00
"metadata": {},
"outputs": [
{
"data": {
2021-03-21 21:13:50 +00:00
"image/png": "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
2017-09-02 18:05:51 +00:00
"text/plain": [
2018-05-30 22:34:41 +00:00
"<Figure size 720x432 with 1 Axes>"
2017-09-02 18:05:51 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2017-09-02 20:07:49 +00:00
"future = m.make_future_dataframe(periods=1826)\n",
"future['cap'] = 8.5\n",
2017-09-02 18:05:51 +00:00
"fcst = m.predict(future)\n",
2018-05-31 01:47:16 +00:00
"fig = m.plot(fcst)"
2017-09-02 18:05:51 +00:00
]
},
{
2017-09-02 20:07:49 +00:00
"cell_type": "markdown",
2017-09-02 18:05:51 +00:00
"metadata": {},
2017-09-02 20:07:49 +00:00
"source": [
2017-09-17 04:52:17 +00:00
"The logistic function has an implicit minimum of 0, and will saturate at 0 the same way that it saturates at the capacity. It is possible to also specify a different saturating minimum.\n",
"\n",
2017-09-02 20:07:49 +00:00
"### Saturating Minimum\n",
"\n",
"The logistic growth model can also handle a saturating minimum, which is specified with a column `floor` in the same way as the `cap` column specifies the maximum:"
]
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 7,
2017-09-02 20:07:49 +00:00
"metadata": {
"output_hidden": true
},
2017-09-02 18:05:51 +00:00
"outputs": [
{
2021-03-21 21:13:50 +00:00
"name": "stderr",
"output_type": "stream",
"text": [
"R[write to console]: Disabling daily seasonality. Run prophet with daily.seasonality=TRUE to override this.\n",
"\n"
]
2017-09-02 18:05:51 +00:00
},
{
"data": {
2021-03-21 21:13:50 +00:00
"image/png": "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
2017-09-02 18:05:51 +00:00
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -w 10 -h 6 -u in\n",
"df$y <- 10 - df$y\n",
"df$cap <- 6\n",
"df$floor <- 1.5\n",
"future$cap <- 6\n",
"future$floor <- 1.5\n",
"m <- prophet(df, growth = 'logistic')\n",
"fcst <- predict(m, future)\n",
"plot(m, fcst)"
]
2017-09-02 20:07:49 +00:00
},
{
"cell_type": "code",
2021-03-21 21:13:50 +00:00
"execution_count": 6,
2017-09-02 20:07:49 +00:00
"metadata": {},
"outputs": [
{
"data": {
2021-03-21 21:13:50 +00:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAGoCAYAAABbtxOxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOzdeXwU9f348dfM7G7CfR+CAl7IESAJCRBADeJdRQEVT2xraw+tV1vr2a+tB1ZbRWvVn/UEFQ8Ob0VFUwUCBJIAQRA8ue/cx+7szOf3x+zO7mY3nFlC5P3sg5Ld2Z2ZHVZ473vfn/dbU0ophBBCCCGEEADoTX0CQgghhBBCHE4kQBZCCCGEECKKBMhCCCGEEEJEkQBZCCGEEEKIKBIgCyGEEEIIEcXT1CcQrXPnzvTp06epT6NZMU0Tr9fb1KdxxJHr3jTkujcNue5NQ677oSfXvGk05XX/4Ycf2LlzZ9z9h1WA3KdPH5YuXdrUp9GsbN68mR49ejT1aRxx5Lo3DbnuTUOue9OQ637oyTVvGk153bOyshLeLyUWQgghhBBCRJEAWQghhBBCiCgSIAshhBBCCBFFAmQhhBBCCCGiSIAshBBCCCFEFAmQhRBCCCGEiCIBshBCCCGEEFEkQBZCCCGEECKKBMhCCCGEEEJEkQBZCCGEEEKIKBIgCyGEEEIIEUUCZCGEEEIIIaIkNUAuKyvjoosuol+/fvTv35/8/PxkHk4IIYQQQoiD5knmzm+88UbOPvtsZs6cSSAQoKamJpmHE0IIIYQQ4qAlLUAuLy/niy++4MUXXwTA5/Ph8/mSdbiDsmXLFmzbjrmvZcuWdOjQAYBNmzbFPadVq1a0b98epRSbN2+O2966dWvatWuHZVls3bo1bnvbtm1p06YNwWCQbdu2xW1v164drVu3xjRNtm/fHre9ffv2tGrVCr/fn/D8OnbsSIsWLairq2PXrl1x2zt16kRqaiq1tbXs3r07bnvnzp1JSUmhurqasrKyuO1du3bF6/VSVVVFeXl53PZu3brh8XiorKykoqIibnv37t0xDIPy8nKqqqritvfo0QNN0ygrK6O6ujpue8+ePQEoLS2N++Cl6zpHHXUUALt27aKuri5mu2EYdO/eHYCdO3fi9/tjtns8Hrp16wbAjh07CAQCMduj38fbtm0jGAzGbE9JSaFz584AbN26FcuyYranpqbSqVMnoPm/93bu3Bm3PZnvva1bt9KlS5cj+r3XpUsX4NC+97Zu3YpS6oh+78Gh/3svfN3DjsT3XtihfO8lOv6R9t6rL9nvvcOSSpKioiKVnZ2trr76apWenq6uueYaVVVVtcfnDB06NFmns0cdO3ZUQMyvq6++2t3u8/nitl9//fVKKaX8fn/cNkDddtttSimldu7cmXD7/fffr5RS6vvvv0+4/fHHH1dKKbVixYqE21944QWllFJvv/12wu0zZ85USik1d+7chNs/+ugjpZRSM2fOTLh9wYIFSimlXnjhhYTbV6xYoZRS6vHHH0+4/fvvv1dKKfXAAw8k3L5z506llFK33357wu11dXVKKaWuv/76uG1er9f9s7n66qvjtnfs2NHdPmHChLjtvXv3drefeeaZcdvT0tLc7Tk5OXHbR4wYoTZt2qSUUiotLS1u+xlnnOE+v3fv3nHbJ0yY8JN47y1cuFDee03w3guT95689+S91/jvvU8//VTee03w3gv/m9oUGoo9NaWiPp42oqVLlzJixAgWLFjA8OHDufHGG2nbti333ntvzOOeeeYZnnnmGcD51LlkyZJknM4evfnmm3Gflo899lhGjhwJwIwZM+I+7fbt25fs7Gwsy+K1116L2+eAAQPIyMigrq6OWbNmxW0fMmQIaWlpVFVV8fbbb8dtHzp0KP369aO0tJQPPvggbvuIESM4/vjjWbNmDcuWLYvbfvLJJ9OrVy82b97M559/Hrc9NzeXnj17sn79er788su47WeeeSZdunTh22+/ZdGiRXHbzz33XDp06NDg8S+44AJat25NSUkJy5cvj9s+ceJEUlNTKS4uZtWqVXHbL730UgzDoKCggLVr18Zs03Wdyy67DICFCxfy/fffx2z3+XxcfPHFAHzxxRds2LAhZnurVq248MILAfjss8/YsmVLzPZ27dpx3nnnATB37ty4bEHnzp3JzMykS5cuvPfee3Gf5rt3787YsWMBeOutt+I+jR9zzDGccsopQPN+7+3YsYOPP/44bnsy33uVlZVMmjTpiH7vnXXWWQCH9L1XWVlJmzZtjuj3Hhz6v/fC1x2O3Pde2KF6733zzTcsXrw4bvuR9t6Ldijee8OHD3e/oTjUxo0bx9KlS+PuT1qAvHXrVkaMGMEPP/wAwJdffsmDDz7I+++/3+BzsrKyEp6kaNjmzZvp0aNHU5/GEUeue9OQ69405Lo3Dbnuh55c86bRlNe9odgzaV0sunfvzjHHHMPXX38NwLx58xgwYECyDieEEEIIIUSjSGpl9L///W+uuOIKAoEAxx13HC+88EIyDyeE2IP8/Hzy8vLIzc0lJyenqU9HCCGEOGwlNUBOT0+XkgkhDgP5+fmMHTuWQCCAz+dj3rx5EiQLIYQQDZBJekIcAfLy8ggEAliWRSAQIC8vr6lPSQghhDhsSYAsxBEgNzcXn8+HYRj4fD5yc3Ob+pSEEEKIw9Zh2p1ZCNGYcnJymDdvntQgCyGEEPtAAmQhjhA5OTkSGAshhBD7QEoshBBCCCGEiCIBshBCCCGEEFEkQBZCCCGEECKKBMhCCCGEEEJEkQBZCCGEEEKIKBIgCyGEEEIIEUUCZCGEEEIIIaJIgCyEEEIIIUQUCZCFEEIIIYSIIgGyEEIIIYQQUSRAFkIIIYQQIooEyEIIIYQQQkSRAFkIIYQQQogoEiALIYQQQggRRQJkIYQQQgghokiALIQQQgghRBQJkIUQQgghhIgiAbIQQgghhBBRJEAWQgghhBAiigTIQgghhBBCRJEAWQghhBBCiCgSIAshhBBCCBFFAmQhhBBCCCGiSIAsfjLy8/OZMmUK+fn5TX0qQgghhGjGPE19AkI0hvz8fMaOHUsgEMDn8zFv3jxycnKa+rSEEEII0QxJBln8JOTl5REIBLAsi0AgQF5eXlOfkhBCCCGaKQmQxU9Cbm4uPp8PwzDw+Xzk5uY29SkJIYQQopmSEgvxk5CTk8O8efPIy8sjNzdXyiuEEEIIccAkQBY/GTk5ORIYCyGEEOKgSYmFEEIIIYQQUSRAFkIIIYQQIooEyEIIIYQQQkSRAFkIIYQQQogoEiALIYQQQggRRQJkIYQQQgghokiALIQQQgghRBQJkIUQQgghhIgiAbIQQgghhBBRJEAWQgghhBAiigTIQgghhBBCRJEAWQghhBBCiCgSIAshhBBCCBFFAmQhhBBCCCGiHPEBcn5+PlOmTCE/P7+pT0UIIYQQQhwGPE19Ak0pPz+fsWPHEggE8Pl8zJs3j5ycnKY+LSGEEEII0YSO6AxyXl4egUAAy7IIBALk5eU19SkJIYQQQogmdkQHyLm5ufh8PgzDwOfzkZub29SnJIQQQgghmtgRXWKRk5PDvHnzyMvLIzc3V8orhBBCCCHEkR0ggxMkS2AshBBCCCHCjugSi0NFOmUIIYQQQjQfR3wGOdmkU4YQQgghRPMiGeQkO5hOGZJ5FkIIIYQ49CSDnGThThnhDPK+dsqQzPP+y8/PlwWXQgghhDhoEiAn2YF2ykiUeZagr2HygUIIIYQQjUUC5EPgQDpldOrUCV3XUUpJj+Z9IB8ohBBCCNFYpAa5ETVWzXB+fj433XQTlmWh6zpTp06VYG8vZOiLEEIIIRpLUjPIffr0oU2bNhiGgcfjYenSpck8XJNqzK/4p02bRl1dHUopNE1j165djXy2Pz0y9EUIIYQQjSXpJRaff/45nTt3TvZhmlxjfcWfn5/P888/j1IKAI/HI9nQfSRDX4QQQgjRGKTEopGEa4Z1XT+or/jz8vIIBoPu7XPOOUeCvn0kbfGEEEII0RiSmkHWNI0zzzwTTdP4zW9+w7XXXhv3mGeeeYZnnnkGgK1
2017-09-02 20:07:49 +00:00
"text/plain": [
2018-05-30 22:34:41 +00:00
"<Figure size 720x432 with 1 Axes>"
2017-09-02 20:07:49 +00:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['y'] = 10 - df['y']\n",
"df['cap'] = 6\n",
"df['floor'] = 1.5\n",
"future['cap'] = 6\n",
"future['floor'] = 1.5\n",
"m = Prophet(growth='logistic')\n",
"m.fit(df)\n",
"fcst = m.predict(future)\n",
2018-05-31 01:47:16 +00:00
"fig = m.plot(fcst)"
2017-09-02 20:07:49 +00:00
]
2017-09-17 04:52:17 +00:00
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To use a logistic growth trend with a saturating minimum, a maximum capacity must also be specified."
]
2017-09-02 18:05:51 +00:00
}
],
"metadata": {
"kernelspec": {
2020-05-15 04:45:03 +00:00
"display_name": "Python 3",
2017-09-02 18:05:51 +00:00
"language": "python",
2020-05-15 04:45:03 +00:00
"name": "python3"
2017-09-02 18:05:51 +00:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
2020-05-15 04:40:40 +00:00
"version": 3
2017-09-02 18:05:51 +00:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
2020-05-15 04:40:40 +00:00
"pygments_lexer": "ipython3",
2021-03-21 21:13:50 +00:00
"version": "3.8.3"
2017-09-02 18:05:51 +00:00
}
},
"nbformat": 4,
"nbformat_minor": 1
}