{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# El titular dice lo que encontraste, no lo que hiciste\n",
    "\n",
    "Los mismos números dan cuatro titulares distintos. Cuál eliges decide si te aprueban el proyecto o te hacen volver con más datos.\n",
    "\n",
    "Cuaderno de práctica del capítulo 19 de **Estadística desde cero**, de Miss Yera.\n",
    "\n",
    "Corre de arriba abajo. Si lo abres en Google Colab no necesitas instalar nada.\n",
    "\n",
    "Capítulo completo: https://missyera.com/guias/estadistica-desde-cero/el-titular-va-primero/\n",
    "\n",
    "Los ejercicios están al final y traen una celda vacía debajo de cada uno. Las\n",
    "respuestas viven en el cuaderno de soluciones, y merece la pena pelearse un\n",
    "rato antes de abrirlo 💛"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Antes de empezar\n",
    "\n",
    "Esta celda baja el ayudante que corrige tus ejercicios. Después, en cada\n",
    "ejercicio que se pueda corregir solo, vas a ver `%%revisa` arriba de la celda:\n",
    "escribe tu respuesta debajo, ejecuta, y te digo si te salió 💛"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import urllib.request\n",
    "\n",
    "# El ayudante de los cuadernos. Trae la corrección de los ejercicios y, en los\n",
    "# capítulos de consola, la celda mágica que ejecuta los comandos. Se baja en\n",
    "# vez de venir pegado aquí para que siempre sea el último.\n",
    "urllib.request.urlretrieve(\n",
    "    \"https://missyera.com/static/cuadernos/revisa.py\", \"revisa.py\")\n",
    "import revisa\n",
    "revisa.carga({\n",
    "    1: \"YmFzZSAwLjYgLT4gc3ViaXIgMSBwdW50byBlcyB1biAxLjcgJSBkZSBtZWpvcmEKYmFzZSAwLjMgLT4gc3ViaXIgMSBwdW50byBlcyB1biAzLjMgJSBkZSBtZWpvcmEKYmFzZSAwLjEgLT4gc3ViaXIgMSBwdW50byBlcyB1biAxMC4wICUgZGUgbWVqb3JhCmJhc2UgMC4wMiAtPiBzdWJpciAxIHB1bnRvIGVzIHVuIDUwLjAgJSBkZSBtZWpvcmE=\",\n",
    "    2: \"Ym9yZGUgYmFqbyAgLT4gMTY3MzMgc29sZXMKY2VudHJvICAgICAgLT4gNTYwODYgc29sZXMKYm9yZGUgYWx0byAgLT4gOTU0Mzkgc29sZXM=\",\n",
    "    3: \"V2hhdHNBcHAgLyBXZWIgPSAxLjExOQpXaGF0c0FwcCAtIFdlYiA9IDAuMDY5NA==\",\n",
    "    4: \"ZW50ZXJhICBuID0gMTUyNiB8IGVudHJlIDIuMSB5IDExLjggfCBhbmNobyA5LjcKbWl0YWQgICBuID0gNzYyIHwgZW50cmUgMi41IHkgMTYuMiB8IGFuY2hvIDEzLjcKY3VhcnRvICBuID0gMzgxIHwgZW50cmUgLTEuMSB5IDE4LjEgfCBhbmNobyAxOS4y\",\n",
    "    5: \"cmVsYXRpdm8gICAxMS45JQphYnNvbHV0byAgIDYuOSBwdW50b3MKaW50ZXJ2YWxvICAyLjEgYSAxMS44IHB1bnRvcwpwbGF0YSAgICAgIDU2MDg2IHNvbGVz\",\n",
    "    6: \"dmVudGFzICA6IDE1MjYKY2xpZW50ZXM6IDU3MQp2ZW50YXMgcG9yIGNsaWVudGU6IDIuNjc=\",\n",
    "}, lenguaje=\"python\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Hiciste el análisis. Los números están bien, la prueba es la que tocaba y el\n",
    "cuaderno corre de arriba abajo.\n",
    "\n",
    "Y ahora tienes que decirlo en una frase, porque nadie va a leer tu cuaderno.\n",
    "Esa frase es el trabajo entero visto desde afuera, y casi nunca se enseña 🌸"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Los números que vamos a contar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from scipy import stats\n",
    "\n",
    "URL = 'https://missyera.com/static/datasets/ventas-miss-yera.csv'\n",
    "df = pd.read_csv(URL)\n",
    "df['monto'] = pd.to_numeric(df['monto'], errors='coerce')\n",
    "d = df[['canal', 'compro', 'segmento', 'monto']].dropna(subset=['canal', 'compro'])\n",
    "\n",
    "w = d[d['canal'] == 'WhatsApp']['compro']\n",
    "b = d[d['canal'] == 'Web']['compro']\n",
    "\n",
    "print('WhatsApp: n =', len(w), '| convierte', round(float(w.mean()), 4))\n",
    "print('Web     : n =', len(b), '| convierte', round(float(b.mean()), 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dos canales, la conversión de cada uno. De ahí en adelante todo es la misma\n",
    "información contada de maneras distintas."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Titular 1: el relativo, que es el que todos usan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dif = float(w.mean() - b.mean())\n",
    "print('sube un', round(dif / float(b.mean()) * 100, 1), '%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*\"WhatsApp convierte un 11,9% más que la web.\"*\n",
    "\n",
    "Suena bien y es cierto. Y tiene dos trampas que no se ven.\n",
    "\n",
    "La primera: es un **porcentaje de un porcentaje**. La conversión\n",
    "pasó de 58,3% a 65,2%, y eso es un 11,9% más *de lo que ya había*. Quien\n",
    "lo escuche sin pensar va a entender \"sube 11,9 puntos\", que es casi el doble de\n",
    "lo que pasó.\n",
    "\n",
    "La segunda es peor, y se ve mirando un segmento chico:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bodega = d[d['segmento'] == 'Bodega']\n",
    "a2 = bodega[bodega['canal'] == 'WhatsApp']['compro']\n",
    "b2 = bodega[bodega['canal'] == 'Web']['compro']\n",
    "print('Bodega WhatsApp:', round(float(a2.mean()), 4))\n",
    "print('Bodega Web     :', round(float(b2.mean()), 4))\n",
    "print('relativo       :', round((float(a2.mean()) - float(b2.mean()))\n",
    "                                / float(b2.mean()) * 100, 1), '%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "16,2% en Bodega contra 11,9% general. ¿Bodega es el mejor segmento?\n",
    "\n",
    "No necesariamente: el relativo **crece solo cuando la base es más\n",
    "chica**. Bodega convierte peor de entrada, así que la misma cantidad de\n",
    "puntos parece más. Con una base del 1%, subir un punto es un 100% de mejora, y\n",
    "sigue siendo un punto 🙃"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Titular 2: el absoluto, que es el honesto"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print('sube', round(dif * 100, 1), 'puntos')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*\"WhatsApp convierte 6,9 puntos más que la web.\"*\n",
    "\n",
    "Menos vistoso, imposible de malinterpretar. Y fíjate en la palabra\n",
    "**puntos**, que no es un adorno: decir \"6,9 por ciento más\" sería\n",
    "mentira, porque el por ciento ya está ocupado por la conversión.\n",
    "\n",
    "Esa distinción entre *puntos porcentuales* y *por ciento* es la\n",
    "que más se confunde en informes reales, y la que más discusiones caras\n",
    "provoca."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Titular 3: el intervalo, que es el que aguanta preguntas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "se = float(np.sqrt(w.var(ddof=1) / len(w) + b.var(ddof=1) / len(b)))\n",
    "lo, hi = dif - 1.96 * se, dif + 1.96 * se\n",
    "print('entre', round(lo * 100, 1), 'y', round(hi * 100, 1), 'puntos')\n",
    "print('valor p:', round(float(stats.ttest_ind(w, b, equal_var=False)[1]), 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*\"WhatsApp convierte entre 2 y 12 puntos más.\"*\n",
    "\n",
    "Este es el bueno, y es el que casi nadie pone en el titular porque parece que\n",
    "te estás lavando las manos.\n",
    "\n",
    "Es al revés. Mira lo que hace en una reunión: si alguien te pregunta \"¿y qué\n",
    "tan seguro estás?\", ya lo contestaste. Y si el plan de la empresa necesitaba 10\n",
    "puntos para salir a cuenta, el intervalo te está diciendo que **puede que\n",
    "no alcance**, y eso es exactamente lo que esa persona necesita saber\n",
    "antes de firmar.\n",
    "\n",
    "El valor p dice que la diferencia es real. El intervalo dice\n",
    "**de qué tamaño**. En una reunión el segundo importa más, y lo\n",
    "trabajamos en el capítulo 10."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Titular 4: la plata, que es el que consigue el presupuesto"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "ticket = float(d['monto'].dropna().mean())\n",
    "print('ticket medio:', round(ticket, 2))\n",
    "for n in (1000, 10000):\n",
    "    print(' con', n, 'clientes ->', round(dif * n, 1), 'ventas mas,',\n",
    "          round(dif * n * ticket), 'soles')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*\"Con 1.000 clientes son unas 69 ventas más, cerca de 56.000 soles.\"*\n",
    "\n",
    "Este es el que hace que alguien deje de mirar el teléfono 💰\n",
    "\n",
    "Y también el más fácil de inflar. Tres cosas que hay que decir en voz alta al\n",
    "darlo:\n",
    "\n",
    "- **De dónde sale el 1.000.** Si te lo inventaste para que el\n",
    "número quede bonito, se nota en la primera pregunta.\n",
    "\n",
    "- **Que el ticket medio es un promedio**, con toda la dispersión\n",
    "que trabajamos en el capítulo 4 detrás.\n",
    "\n",
    "- **Que el rango también se traduce.** Con el borde bajo del\n",
    "intervalo, esos 56.000 se convierten en 17.000. Da menos gusto decirlo y es lo\n",
    "que te salva cuando alguien haga la cuenta."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## El titular que no sirve, y es el más común"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*\"Analizamos 3.037 ventas con una prueba t de Welch y obtuvimos un p-valor\n",
    "de 0,0053.\"*\n",
    "\n",
    "Eso es lo que **hiciste**, no lo que **encontraste**.\n",
    "Y es el titular de la mitad de los informes que me toca leer.\n",
    "\n",
    "Sale de un miedo razonable: si no digo el método, van a pensar que me lo\n",
    "inventé. Pero el método va en el cuerpo y en el anexo, donde quien quiera\n",
    "revisarlo lo encuentra. El titular es para quien tiene que decidir algo."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## La regla, en una línea"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Qué cambia, cuánto, con cuánta certeza y qué significa en tu\n",
    "negocio.**\n",
    "\n",
    "Los cuatro juntos caben en una frase:\n",
    "\n",
    "*\"Mover clientes a WhatsApp sube la conversión entre 2 y 12 puntos, o sea\n",
    "entre 17.000 y 95.000 soles al año con 1.000 clientes.\"*\n",
    "\n",
    "Eso es el análisis entero, dicho en el idioma de quien paga 🌟"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## El error de escribir el titular antes de mirar"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Esto revienta a propósito.** Se ejecuta dentro de un `try` para que puedas seguir con \"ejecutar todo\" y aun así ver la queja."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "try:\n",
    "    d['segmento'].mean()\n",
    "except Exception as e:\n",
    "    print(f'{type(e).__name__}: {e}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Y la queja que tiene que salir es esta:\n",
    "\n",
    "```\n",
    "TypeError: Cannot perform reduction 'mean' with string dtype\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Parece un error tonto y es el síntoma de algo que no lo es: alguien quiso\n",
    "poner \"el segmento promedio\" en una lámina.\n",
    "\n",
    "No existe un segmento promedio. Lo que existe es el más frecuente, que es la\n",
    "moda del capítulo 3. Cuando un titular pide un\n",
    "número que no se puede calcular, casi siempre es porque la frase se escribió\n",
    "antes que el análisis."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lo que te llevas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- El titular dice qué encontraste, no qué hiciste.\n",
    "\n",
    "- El relativo exagera, y exagera más cuanto más chica es la base.\n",
    "\n",
    "- Puntos porcentuales y por ciento no son lo mismo.\n",
    "\n",
    "- El intervalo va en el titular, no en el anexo: contesta la pregunta antes\n",
    "de que te la hagan.\n",
    "\n",
    "- Traducir a dinero consigue presupuesto, y hay que traducir también el borde\n",
    "bajo.\n",
    "\n",
    "- Qué cambia, cuánto, con cuánta certeza y qué significa."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comprueba que lo tienes\n",
    "\n",
    "Tienes una diferencia de 6,9 puntos con un intervalo que va de 2,1 a 11,8. ¿Cuál de estos titulares se sostiene si te preguntan?\n",
    "\n",
    "a) WhatsApp convierte entre 2 y 12 puntos más, y con 1.000 clientes son unos 56.000 soles\n",
    "\n",
    "b) WhatsApp convierte 11,9% más que Web\n",
    "\n",
    "c) WhatsApp es mejor canal que Web\n",
    "\n",
    "d) Analizamos 3.037 ventas con una prueba t de Welch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ejercicios"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. El relativo crece cuando la base baja\n",
    "\n",
    "Comprueba que el mismo punto de mejora se ve distinto según\n",
    "de dónde partas."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%revisa 1\n",
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Traduce el borde bajo, no solo el centro\n",
    "\n",
    "La cuenta que hay que llevar hecha a la reunión."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%revisa 2\n",
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. El titular de tu compañero, revisado\n",
    "\n",
    "Comprueba si \"casi el doble\" se sostiene."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%revisa 3\n",
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Cuánto se ensancha el titular si te falta muestra\n",
    "\n",
    "Ve recortando la muestra y mira el intervalo abrirse."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%revisa 4\n",
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Escribe las cuatro versiones de un tirón\n",
    "\n",
    "Una función para no volver a improvisar el titular."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%revisa 5\n",
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. El titular con la limitación dentro\n",
    "\n",
    "Cuenta cuántos clientes distintos hay detrás de esas ventas."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%revisa 6\n",
    "# tu turno"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "Ese era el capítulo 19 de **Estadística desde cero**. El texto completo, con las salidas de cada bloque, está en https://missyera.com/guias/estadistica-desde-cero/el-titular-va-primero/\n",
    "\n",
    "Que tengas lindo día! 🌸"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
