Imagen de Tolga Aslantürk en PexelsOctubre de 2022 trajo muchas novedades a la sede de Twitter en San Francisco (y un fregadero). Elon Musk, director ejecutivo de Tesla y SpaceX, se convirtió en el nuevo propietario y director ejecutivo de la empresa el 27 de octubre. Algunas audiencias acogieron con entusiasmo el cambio, mientras que otras permanecieron escépticas. Un día después, el 28 de octubre, Musk tuiteó “el pájaro está liberado”. ¿Qué tan poderoso puede ser un tweet? ¡Veamos!Imagen de Laura Tancredi en Pexels. En esta publicación de blog usaremos CausalPy — un nuevo paquete causal de Python de PyMC Developers (https://www.pymc-labs.io) para estimar el impacto del tweet de Musk en nuestros comportamientos de búsqueda en Google aprovechando una poderosa técnica causal llamada control sintético. Discutiremos los conceptos básicos de la mecánica del método, lo implementaremos paso a paso y analizaremos los posibles problemas con nuestro enfoque, vinculando a recursos adicionales en el camino. ¿Listo? A principios de noviembre de 2022, tenía programada una conferencia para hablar cuantificación de los efectos de las intervenciones en datos de series temporales. Pensé que sería interesante usar un ejemplo del mundo real en la presentación y recordé el tweet de Musk. Hubo mucho revuelo en Internet en torno a la adquisición de Twitter y me preguntaba en qué medida un tuit relacionado con un evento como este puede influir en nuestro comportamiento más allá de las actividades tradicionales de las redes sociales, por ejemplo, ¿cómo afecta la frecuencia con la que buscamos “Twitter” en Google? ?incrustar 1. El tweet de Elon Musk. Pero lo primero es lo primero. El análisis causal busca identificar y/o cuantificar los efectos de las intervenciones (también conocidas como tratamientos) en los resultados de interés. Cambiamos algo en el mundo y queremos entender cómo cambia otra cosa como resultado de nuestra acción. Por ejemplo, una empresa farmacéutica podría estar interesada en determinar el efecto de un nuevo fármaco en un grupo particular de pacientes. Esto puede ser un desafío por varias razones, pero la más básica es que es imposible observar al mismo paciente tomando el medicamento y no tomándolo al mismo tiempo (esto se conoce como el problema fundamental de la inferencia causal). Personas descubierto muchas formas inteligentes de superar este desafío. El que se considera un estándar de oro hoy en día se llama experimento aleatorio (o ensayo controlado aleatorio; ECA)¹. En un ECA, los participantes (u otras entidades en general a veces llamadas unidades) se asignan al azar al grupo de tratamiento (con tratamiento) o al grupo de control (sin tratamiento)². Esperamos que en un ECA bien diseñado, la aleatorización equilibre los grupos de tratamiento y control en términos de factores de confusión y otras características importantes, ¡y este enfoque suele tener bastante éxito! Desafortunadamente, los experimentos no siempre están disponibles por razones económicas, éticas u organizativas, entre otras. ¿Qué pasaría si…Imagen de Engin Akyurt @ pexels.com¿Qué pasa si solo podemos observar el resultado bajo tratamiento pero el grupo de control no está disponible? Alberto Abadie y Javier Gardeazabal se encontraron precisamente en esta situación al intentar evaluar el coste económico del conflicto en el País Vasco (Abadie & Gardeazabal, 2003). Su artículo dio origen al método que discutimos hoy: el control sintético. La idea básica detrás del método es simple: si no tenemos un grupo de control, ¡creemos uno! ¿Cómo? Una solución es predecirlo. tomar algunas otras unidades que son de alguna manera similares a nuestra unidad tratada (pero no tratada) y usarlas como predictores? ¡Esto es (casi exactamente) el control sintético! Estas unidades no tratadas a veces se denominan grupo de donantes. Recordando que estamos en el ámbito de los datos de series de tiempo, el estimador de control sintético básico es una suma ponderada de unidades no tratadas. Usaremos una restricción de peso adicional que obliga a los pesos a estar entre 0 y 1 y suma hasta uno². Cada peso escala la contribución de cada unidad no tratada al resultado. Puede pensar en ello como una regresión lineal restringida a lo largo del tiempo. Ajustamos el modelo en las observaciones previas al tratamiento y predecimos el valor del resultado posterior al tratamiento. Esta lógica se basa en la suposición de que las variables del grupo de donantes no fueron influenciadas por el tratamiento. Cuando se cumple esta suposición, el grupo de control predicho después del tratamiento debe mantener sin cambios todas las características previas al tratamiento (suponiendo que las variables del grupo de donantes son buenos predictores del resultado).
Si desea ver una implementación paso a paso del control sintético con matemáticas bien presentadas, consulte la publicación del blog de Matteo Courthoud y/o el capítulo de Matheus Facure sobre control sintético. Si desea más contexto de investigación aplicada, consulte “Causal Inference – The Mixtape” de Scott Cunningham. Para la implementación bayesiana (la que usamos aquí), verifique el código fuente de CausalPy.
Volviendo a nuestro tuit. Mi hipótesis fue que el tuit ampliamente discutido de Musk (“el pájaro está liberado”) hizo que la gente se interesara más en Twitter y en las noticias al respecto. Por lo tanto, esperaríamos observar un aumento en la cantidad de búsquedas de “Twitter” en relación con otras plataformas de redes sociales. En realidad, esta hipótesis es difícil de verificar, ya que el resultado podría estar influenciado no solo por el tweet de Musk sino también por otros factores (por ejemplo, publicaciones en los medios sobre la adquisición de Twitter). Tenga en cuenta que este es, de hecho, un gran ejemplo de cómo confuso puede ocurrir en control sintético análisis³ (adquisición de Twitter que provocó el tuit de Musk y provocó un mayor interés en la plataforma). ¿Qué especificación (Pío como causa o adquisición como causa) le parece más razonable? ¡Házmelo saber en los comentarios! Como esta es una publicación divertida, asumiremos que la influencia del tweet de Musk en los comportamientos de búsqueda no se confunde y que podemos estimarlo con seguridad. Al mismo tiempo, le animo a estimar el efecto de la adquisición de Twitter en el número de búsquedas de “Twitter”. No dude en compartir sus resultados conmigo en LinkedIn o, si aún no lo ha hecho, únase a la comunidad de Causal Python (https://causalpython.io), y envíeme los resultados como respuesta a uno de nuestros correos electrónicos semanales. .Utilizamos Google Trends como fuente de datos de series temporales que representan el número global de búsquedas diarias. Nos interesa saber cómo busca “Gorjeohan cambiado, por lo que recopilamos datos para esta búsqueda y recopilamos datos para “TikTok”, “Instagram” y “LinkedIn” para usarlos como nuestro grupo de donantes.Usaremos los datos durante un período comprendido entre el 15 de mayo y el 11 de noviembre de 2022. Veamos el diagrama.Figura 1. Datos para búsquedas en Twitter, LinkedIn, TikTok e Instagram. Imagen de un servidor. Podemos ver que Twitter e Instagram son las plataformas más buscadas. Hay alguna correlación entre ellos. También podemos ver que hay un componente estacional muy fuerte en las búsquedas de LinkedIn con muchas menos búsquedas durante los fines de semana, lo que tiene sentido dado el carácter profesional del sitio. Musk publicó su tweet “el pájaro está libre” el 28 de octubre. Agreguemos esto información a la trama.Figura 2. Datos de búsquedas de Twitter, LinkedIn, TikTok e Instagram, incluido el tratamiento (línea de puntos negra). Imagen de su servidor. Vemos que el fuerte aumento en las búsquedas de Twitter coincide con el día del tweet de Musk. Veamos qué tan fuerte es el efecto que se le da a un grupo de control producido sintéticamente. Empezamos con las importaciones.Bloque de código 1. Importando las bibliotecas. Seguimos la convención de documentación de CausalPy e importamos la biblioteca como cp. Importamos pandas para leer los datos y matplotlib para ayudarnos con el trazado. Leemos los datos y emitimos el índice hasta la fecha y hora (lo que nos ayudó a generar los gráficos anteriores y facilita la indexación del tratamiento, pero no es necesario).Bloque de código 2. Leyendo los datos y cambiando el índice al tipo de fecha y hora. Echemos un breve vistazo a los datos.Figura 3. Las primeras cinco filas de nuestro conjunto de datos. Imagen de su servidor. Como era de esperar, vemos cuatro variables y un índice de fecha y hora. Usaremos las búsquedas de “LinkedIn”, “TikTok” e “Instagram” como señales del grupo de donantes. Almacenemos la fecha de tratamiento en una variable e instanciamos el modelo.Bloque de código 3. Almacenar la fecha del tratamiento en una variable e instanciar el modelo. Usamos el modelo WeightedSumFitter que nos permitirá encontrar pesos para cada una de las variables de nuestro grupo de donantes para producir el control sintético que mejor se ajuste. Tal vez recuerde que dijimos anteriormente que usamos dos restricciones para estos pesos: deben sumar 1deberían estar entre 0 y 1
Tenga en cuenta que si la primera condición es verdadera, la segunda condición puede reemplazarse por una restricción menos restrictiva de no negatividad; usamos la condición más restrictiva ya que podría ser más intuitiva para algunos lectores.
El cumplimiento de estas limitaciones se puede lograr de múltiples maneras. Si revisó una de las referencias que mencionamos anteriormente (el blog de Matteo o el libro de Matheus), es posible que haya notado que ambos usaron optimización restringida para lograr este objetivo. Como usamos el enfoque bayesiano, necesitamos codificar estas restricciones a nivel de distribución. Una distribución que se adapta perfectamente a nuestras restricciones requeridas es la distribución de Dirichlet. Las muestras de la distribución de Dirichlet suman 1 y no son negativos. Si esto te hace pensar en la distribución beta, ¡es una gran intuición! Dirichlet es una generalización (multidimensional) de beta.CausalPy se encargará de inicializar y ajustar las distribuciones detrás de escena. ¡Ahora estamos listos para definir y ajustar el modelo! CausalPy admite fórmulas de estilo R para definir modelos. La fórmula twitter ~ 0 + tiktok + linkedin + instgram dice que queremos modelar las búsquedas de Twitter a lo largo del tiempo en función de las búsquedas de “TikTok”, “LinkedIn” e “Instagram”. El cero al comienzo de la fórmula le dice al modelo que no queremos ajustar la intersección.Bloque de código 4. Definición y ajuste del modelo. Usamos el objeto de experimento SyntheticControl que se encargará del ajuste del modelo y la generación de resultados por nosotros. Pasamos cuatro argumentos al constructor: conjunto de datos, índice de tratamiento, fórmula que define el modelo y el objeto del modelo (elegimos WeightedSumFitter). Si está ejecutando el código usted mismo, notará que lleva un tiempo inicializar la muestra. y probar las cadenas, pero después de un minuto más o menos deberíamos estar listos para trazar los resultados. ¡Examinemos los resultados! El objeto de resultados tiene un método muy conveniente llamado .plot() que nos permite resumir los resultados gráficamente de manera eficiente.Bloque de código 5. Trazar los resultados. Esto nos da el siguiente resultado:Figura 4. Los resultados de nuestro modelo. Imagen de su servidor. En la parte superior de la gráfica vemos la impresión de Bayesian anterior a la intervención. R² (Gelman et al., 2018) que cuantifica qué tan bien las variables de nuestro grupo de donantes predicen el número de búsquedas de Twitter antes del tratamiento. El panel superior presenta observaciones reales de la variable de resultado (puntos negros), la predicción previa al tratamiento del resultado (línea azul oscuro), variables del grupo de donantes (gris), nuestro control sintético generado (verde), tiempo de intervención (línea roja vertical) y el efecto de la intervención (región azul sombreada). En el panel central vemos el impacto causal previsto pre y post-tratamiento. Finalmente, el panel inferior muestra el efecto causal acumulativo.bayesiano R² de 0.385 indica que el ajuste del pretratamiento del modelo no es muy bueno (el ajuste perfecto habría R² de 1)⁴. Esto no es necesariamente muy sorprendente ya que nuestro grupo de donantes es pequeño. Muchos profesionales recomendarían usar al menos entre 5 y 25 variables en su grupo de donantes como regla general. Solo teníamos 3. Por otro lado, podemos estar bastante seguros de que no estamos sobreajustados, lo que podría suceder con grupos de donantes más grandes (ver Abadie, 2021). El efecto posterior al tratamiento del tweet de Elon Musk (suponiendo que estamos de acuerdo en que no hay confusión oculta en el análisis) es relativamente grande, lo que indica que su tweet fue lo suficientemente poderoso como para cambiar temporalmente nuestros comportamientos de búsqueda en Google. Tenga en cuenta que la otra hipótesis (adquisición de Twitter en lugar del tweet como tratamiento) parece prometedora: ¿se dio cuenta? el aumento en el número de búsquedas de “Twitter” justo antes de la intervención? Si decide comprobar esta hipótesis, comparte tus resultados conmigo y el comunidad!CausalPy todavía está en sus años de bebé, pero está creciendo constantemente. Recibí un mensaje de los creadores de la biblioteca de que se están preparando algunas funciones nuevas e interesantes, incluida la compatibilidad con versiones anteriores definidas por el usuario para el control sintético. Además, hay mucho más en la biblioteca que solo este método. Asegúrese de consultar el repositorio para obtener la última versión y las actualizaciones aquí: https://github.com/pymc-labs/CausalPy
Código y medio ambiente archivo están disponibles aquí:
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…