# External Dependencies:
from IPython.core.display import display, HTML
import matplotlib as mpl
import matplotlib.pyplot as plt
def plot_fcst_results(actuals, predictions):
models = predictions["model"].unique()
customer_types = predictions["customer_type"].unique()
for model in models:
display(HTML(f"
{model}
"))
for customer_type in customer_types:
prediction = predictions[
(predictions["model"] == model)
& (predictions["customer_type"] == customer_type)
]
prediction_tsnums = mpl.dates.date2num(prediction["timestamp"])
actual = actuals[
actuals["customer_type"] == customer_type
]
# Create our figure:
fig = plt.figure(figsize=(15, 6))
ax = plt.gca()
ax.set_title(f"Forecast {customer_type} demand ({model})")
# A black line plot of the actuals (training + test):
ax.plot_date(
mpl.dates.date2num(actual["timestamp"]),
actual["demand"],
fmt="-",
color="black",
label="Actual"
)
# Translucent color-1 fill covering the confidence interval:
ax.fill_between(
prediction_tsnums,
prediction["p10"],
prediction["p90"],
alpha=0.3,
label="80% Confidence Interval"
)
# Color-1 line identifying the prediction median:
ax.plot_date(
prediction_tsnums,
prediction["p50"],
fmt="-",
label="Prediction Median"
)
# Color-2 line identifying the prediction mean:
ax.plot_date(
prediction_tsnums,
prediction["mean"],
fmt="-",
label="Prediction Mean"
)
ax.set_xlabel("Date")
ax.set_ylabel("Rides Taken (Demand)")
ax.legend()
plt.show()
def plot_fcst_merge_results(actuals, predictions):
models = predictions["model"].unique()
customer_types = predictions["customer_type"].unique()
for customer_type in customer_types:
display(HTML(f"{customer_type}
"))
actual = actuals[
actuals["customer_type"] == customer_type
]
# Create our figure:
fig = plt.figure(figsize=(15, 6))
ax = plt.gca()
ax.set_title(f"Forecast {customer_type}")
# A black line plot of the actuals (training + test):
ax.plot_date(
mpl.dates.date2num(actual["timestamp"]),
actual["demand"],
fmt="-",
color="black",
label="Actual"
)
for model in models:
prediction = predictions[
(predictions["model"] == model)
& (predictions["customer_type"] == customer_type)
]
prediction_tsnums = mpl.dates.date2num(prediction["timestamp"])
# Translucent color-1 fill covering the confidence interval:
ax.fill_between(
prediction_tsnums,
prediction["p10"],
prediction["p90"],
alpha=0.3,
label=f"80% Confidence Interval for {model}"
)
# Color-1 line identifying the prediction median:
ax.plot_date(
prediction_tsnums,
prediction["p50"],
fmt="-",
label=f"Prediction Median for {model}"
)
# Color-2 line identifying the prediction mean:
ax.plot_date(
prediction_tsnums,
prediction["mean"],
fmt="-",
label=f"Prediction Mean for {model}"
)
ax.set_xlabel("Date")
ax.set_ylabel("Rides Taken (Demand)")
ax.legend()
plt.show()