Skip to content

Plot Results (`sketch.plot_results`)

This module provides functions for plotting model results, such as channel and baseline contributions, ROI/efficiency, and component decomposition.

Key functions

  • all_contributions_plot(model, config, results_dir)

    • Stacked area chart of weekly contributions for each channel plus a combined baseline (intercept + any extra_features_cols).
    • Inputs: fitted model, config (uses date_col, extra_features_cols), output directory.
    • Saves: weekly_media_and_baseline_contribution.png.
  • plot_channel_contributions(model, config, results_dir)

    • Stacked area chart of channel-only contributions over time (no baseline).
    • Inputs: fitted model, config (uses date_col), output directory.
    • Saves: weekly_media_contribution.png.
  • plot_roi(model, data, config, results_dir)

    • Bar charts of mean and median ROI (revenue) or Conversion Efficiency (if target_type: conversion) by channel.
    • Inputs: fitted model, original data frame (used to sum spend columns), config (uses media[*].spend_col, target_type).
    • Saves: media_performance_mean.png, media_performance_median.png.
  • plot_roi_distribution(model, data, config, results_dir)

    • Per-channel ROI/efficiency distributions with histogram + KDE overlay.
    • Inputs: fitted model, data, config (same keys as above).
    • Saves: performance_distribution.png.
  • plot_waterfall_components_decomposition(model, original_scale=True, figsize=(14,7), results_dir=None, **kwargs)

    • Waterfall plot breaking the target into major components based on model.compute_mean_contributions_over_time(original_scale=True).
    • Returns: matplotlib.figure.Figure and optionally saves a CSV of components if results_dir is provided.

Usage examples

from src.sketch.plot_results import (
all_contributions_plot,
plot_channel_contributions,
plot_roi,
plot_roi_distribution,
plot_waterfall_components_decomposition,
)
# Stacked contributions (baseline + channels)
all_contributions_plot(model=mmm, config=config, results_dir=results_dir)
# Channels only
plot_channel_contributions(model=mmm, config=config, results_dir=results_dir)
# ROI / Conversion Efficiency (depends on config['target_type'])
plot_roi(model=mmm, data=processed_data, config=config, results_dir=results_dir)
plot_roi_distribution(model=mmm, data=processed_data, config=config, results_dir=results_dir)
# Component decomposition
fig = plot_waterfall_components_decomposition(model=mmm, results_dir=results_dir)

Notes

  • Date handling: functions attempt to resolve real datetimes from model.X[date_col]; if unavailable, they coerce series to timestamps.
  • Baseline composition: in all_contributions_plot the baseline is defined as intercept + extra_features_cols.
  • Target type: set config['target_type'] to conversion to switch ROI labels to Conversion Efficiency.