{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7fb27b941602401d91542211134fc71a",
   "metadata": {},
   "source": [
    "# Bayesian Statistics Course Kit: Channel Conversion Model Criticism\n",
    "\n",
    "Use this notebook to compare no-pooling, complete-pooling, and partial-pooling instincts on grouped conversion data. The exercise emphasizes model criticism rather than model glamour.\n",
    "\n",
    "Dataset path on the education site: `/course-kits/bayesian-statistics/channel_conversion.csv`.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acae54e37e7d407bbb7b55eff062a284",
   "metadata": {},
   "source": [
    "## 1. Load the data\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9a63283cbaf04dbcab1f6479b197f3a8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "DATA_URL = \"https://education.dooperator.ai/course-kits/bayesian-statistics/channel_conversion.csv\"\n",
    "df = pd.read_csv(DATA_URL)\n",
    "df[\"conversion_rate\"] = df[\"conversions\"] / df[\"users\"]\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8dd0d8092fe74a7c96281538738b07e2",
   "metadata": {},
   "source": [
    "## 2. Core summary\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "72eea5119410473aa328ad9291626812",
   "metadata": {},
   "outputs": [],
   "source": [
    "pivot = df.pivot(index=\"channel\", columns=\"treatment\", values=\"conversion_rate\")\n",
    "pivot[\"lift\"] = pivot[\"treatment\"] - pivot[\"control\"]\n",
    "pivot.sort_values(\"lift\", ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8edb47106e1a46a883d545849b8ab81b",
   "metadata": {},
   "source": [
    "## 3. Diagnostic check\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "10185d26023b46108eb7d9f57d49d2b3",
   "metadata": {},
   "outputs": [],
   "source": [
    "volume = df.groupby(\"channel\").agg(\n",
    "    total_users=(\"users\", \"sum\"), total_conversions=(\"conversions\", \"sum\")\n",
    ")\n",
    "complete_pool = df.groupby(\"treatment\").agg(\n",
    "    users=(\"users\", \"sum\"), conversions=(\"conversions\", \"sum\")\n",
    ")\n",
    "complete_pool[\"conversion_rate\"] = complete_pool[\"conversions\"] / complete_pool[\"users\"]\n",
    "volume, complete_pool"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8763a12b2bbd4a93a75aff182afb95dc",
   "metadata": {},
   "source": [
    "## 4. Decision memo prompt\n",
    "\n",
    "Write a model criticism note explaining why complete pooling is too blunt, why no pooling is noisy, what partial pooling would stabilize, and what checks you would require before rollout.\n",
    "\n",
    "Keep the memo decision-oriented: say what you would do next, what assumption could break the recommendation, and what evidence would change your mind.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "pygments_lexer": "ipython3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
