Medir la influencia causal intrínseca de sus campañas de marketing |  de Ryan O’Sullivan |  junio de 2024

IA causal, que explora la integración del razonamiento causal en el aprendizaje automático

Foto por Melanie Deziel en desempaquetar

Bienvenido a mi serie sobre IA causal, donde exploraremos la integración del razonamiento causal en modelos de aprendizaje automático. Espere explorar una serie de aplicaciones prácticas en diferentes contextos comerciales.

En el último artículo cubrimos Optimización de los efectos del tratamiento no lineal en precios y promociones.. Esta vez cubriremos medir la influencia causal intrínseca de sus campañas de marketing.

Si se perdió el último artículo sobre los efectos del tratamiento no lineal en precios y promociones, consúltelo aquí:

En este artículo te ayudaré a comprender cómo puedes medir la influencia causal intrínseca de tus campañas de marketing.

Se cubrirán los siguientes aspectos:

  • ¿Cuáles son los desafíos cuando se trata de medición de marketing?
  • ¿Qué es la influencia causal intrínseca y cómo funciona?
  • Un estudio de caso trabajado en Python que muestra cómo podemos utilizar la influencia causal intrínseca para dar a las campañas de marketing el crédito que merecen.

El cuaderno completo se puede encontrar aquí:

¿Cuáles son los diferentes tipos de campañas de marketing?

Las organizaciones utilizan el marketing para hacer crecer su negocio adquiriendo nuevos clientes y reteniendo a los existentes. Las campañas de marketing suelen dividirse en 3 categorías principales:

  • Marca
  • Actuación
  • Retención

Cada uno tiene sus propios desafíos únicos cuando se trata de medición. Comprender estos desafíos es crucial.

Campañas de marca

El objetivo de las campañas de marca es dar a conocer su marca entre nuevas audiencias. A menudo se transmiten en la televisión y en las redes sociales, y estas últimas suelen tener el formato de un vídeo. Por lo general, no tienen un llamado a la acción directo, por ejemplo, “nuestro producto le durará toda la vida”.

El desafío de medir la televisión es inmediatamente obvio: ¡no podemos rastrear quién ha visto un anuncio de televisión! Pero también tenemos desafíos similares cuando se trata de redes sociales: si veo un video en Facebook y luego visito orgánicamente el sitio web y compro el producto al día siguiente, es muy poco probable que podamos unir estos dos eventos.

También existe el desafío secundario de un efecto retardado. Al generar conciencia en nuevas audiencias, pueden pasar días, semanas o meses hasta que lleguen al punto en el que consideren comprar su producto.

Existe un argumento discutible de que las campañas de marca hacen todo el trabajo duro; sin embargo, cuando se trata de medición de marketing, a menudo se infravaloran debido a algunos de los desafíos que destacamos anteriormente.

Campañas de rendimiento

En general, las campañas de rendimiento están dirigidas a los clientes que buscan su producto en el mercado. Se encuentran en canales de búsqueda paga, redes sociales y afiliados. Por lo general, tienen un llamado a la acción, por ejemplo, “haga clic ahora para obtener un 5% de descuento en su primera compra”.

Cuando se trata de campañas de rendimiento, no es inmediatamente obvio por qué son difíciles de medir. Es muy probable que podamos vincular el evento en el que un cliente hace clic en una campaña de rendimiento y ese cliente compra ese día.

Pero, ¿habrían hecho clic si no estuvieran ya familiarizados con la marca? ¿Cómo se familiarizaron con la marca? Si no les hubiéramos mostrado la campaña, ¿habrían comprado orgánicamente de todos modos? ¡Estas son preguntas difíciles de responder desde una perspectiva de ciencia de datos!

Campañas de retención

La otra categoría de campañas es la retención. Se trata de marketing destinado a retener a los clientes existentes. Normalmente podemos realizar pruebas AB para medir estas campañas.

Gráfico de marketing de adquisiciones

Es común referirse a las campañas de marca y de rendimiento como marketing de adquisición. Como mencioné anteriormente, medir las campañas de marca y de rendimiento es un desafío: a menudo subestimamos las campañas de marca y sobrevaloramos las de rendimiento.

El siguiente gráfico es un ejemplo motivador (pero simplificado) de cómo funciona el marketing de adquisición:

Imagen generada por el usuario

¿Cómo podemos estimar (justamente) cuánto contribuyó cada nodo a los ingresos? Aquí es donde la influencia causal intrínseca entra en escena. ¡Profundicemos en lo que es en la siguiente sección!

¿De dónde viene el concepto?

El concepto se propuso originalmente en un artículo de 2020:

Está implementado en el módulo GCM dentro del paquete de Python DoWhy:

Personalmente, al principio encontré el concepto bastante difícil de entender, así que en la siguiente sección lo desglosaremos paso a paso.

Resumen de gráficos causales

Antes de intentar comprender la influencia causal intrínseca, es importante comprender los gráficos causales, los modelos causales estructurales (SCM) y los modelos de ruido aditivo (ANM). Mi artículo anterior en la serie debería ayudarlo a ponerse al día:

Como recordatorio, cada nodo en un gráfico causal puede verse como el objetivo en un modelo donde sus padres directos se utilizan como características. Es común utilizar un modelo de ruido aditivo para cada nodo no raíz:

Imagen generada por el usuario

¿Qué es realmente la influencia causal intrínseca?

Ahora que hemos recapitulado los gráficos causales, comencemos a comprender qué es realmente la influencia causal intrínseca…

La definición del diccionario de intrínseco es “pertenecer naturalmente”. En mi cabeza pienso en un embudo, y las cosas en la parte superior del embudo están haciendo el trabajo pesado. Queremos atribuirles la influencia causal que merecen.

Tomemos el siguiente gráfico de ejemplo para ayudarnos a comenzar a desentrañar aún más la influencia causal intrínseca:

Imagen generada por el usuario
  • A, B y C son nodos raíz.
  • D es un nodo no raíz, que podemos modelar usando sus padres directos (A, B, C) y un término de ruido.
  • E es un nodo no raíz que, al igual que D, podemos modelar utilizando sus padres directos (A, B, C) y un término de ruido.
  • F es nuestro nodo objetivo, que podemos modelar usando sus padres directos (D, E) y un término de ruido.

Centrémonos en el nodo D. Hereda parte de su influencia en el nodo F de los nodos A, B y C. La parte intrínseca de su influencia en el nodo F proviene del término ruido. Por lo tanto, decimos que el término de ruido de cada nodo se puede utilizar para estimar la influencia causal intrínseca en un nodo objetivo. Vale la pena señalar que los nodos raíz simplemente están formados por ruido.

En el estudio de caso, profundizaremos en cómo calcular exactamente la influencia causal intrínseca.

¿Cómo puede ayudarnos a medir nuestras campañas de marketing?

Con suerte, ya puede ver el vínculo entre el ejemplo del marketing de adquisición y la influencia causal intrínseca. ¿Puede la influencia causal intrínseca ayudarnos a dejar de infravalorar las campañas de marca y a dejar de sobrevalorar las campañas de rendimiento? ¡Descubrámoslo en el estudio de caso!

Fondo

Se acerca el final del año y la Directora de Marketing está bajo presión del equipo de Finanzas para que justifique por qué planea gastar tanto en marketing el próximo año. El equipo de Finanzas utiliza un modelo de último clic en el que los ingresos se atribuyen a lo último en lo que hizo clic un cliente. ¡Se preguntan por qué necesitan gastar algo en televisión cuando todo el mundo accede a través de canales orgánicos o sociales!

El equipo de ciencia de datos tiene la tarea de estimar la influencia causal intrínseca de cada canal de marketing.

Configurar el gráfico (DAG)

Comenzamos configurando un DAG utilizando conocimiento experto del dominio, reutilizando el ejemplo de adquisición de marketing anterior:

# Create node lookup for channels
node_lookup = {0: 'Demand',
1: 'TV spend',
2: 'Social spend',
3: 'Organic clicks',
4: 'Social clicks',
5: 'Revenue'
}

total_nodes = len(node_lookup)

# Create adjacency matrix - this is the base for our graph
graph_actual = np.zeros((total_nodes, total_nodes))

# Create graph using expert domain knowledge
graph_actual[0, 3] = 1.0 # Demand -> Organic clicks
graph_actual[0, 4] = 1.0 # Demand -> Social clicks
graph_actual[1, 3] = 1.0 # Brand spend -> Organic clicks
graph_actual[2, 3] = 1.0 # Social spend -> Organic clicks
graph_actual[1, 4] = 1.0 # Brand spend -> Social clicks
graph_actual[2, 4] = 1.0 # Social spend -> Social clicks
graph_actual[3, 5] = 1.0 # Organic clicks -> Revenue
graph_actual[4, 5] = 1.0 # Social clicks -> Revenue

En esencia, el modelo de último clic que utiliza el equipo de finanzas solo utiliza los ingresos directos para medir el marketing.

Imagen generada por el usuario

Proceso de generación de datos

Creamos algunas muestras de datos siguiendo el proceso de generación de datos del DAG:

  • 3 nodos raíz formados por términos de ruido; Demanda, gasto en marca y gasto social.
  • 2 nodos no raíz, ambos heredando la influencia de los 3 nodos raíz más algunos términos de ruido; Clics orgánicos, clics sociales.
  • 1 nodo objetivo, que hereda la influencia de los 2 nodos no raíz más un término de ruido; Ganancia
# Create dataframe with 1 column per code
df = pd.DataFrame(columns=node_lookup.values())

# Setup data generating process
df[node_lookup[0]] = np.random.normal(100000, 25000, size=(20000)) # Demand
df[node_lookup[1]] = np.random.normal(100000, 20000, size=(20000)) # Brand spend
df[node_lookup[2]] = np.random.normal(100000, 25000, size=(20000)) # Social spend
df[node_lookup[3]] = 0.75 * df[node_lookup[0]] + 0.50 * df[node_lookup[1]] + 0.25 * df[node_lookup[2]] + np.random.normal(loc=0, scale=2000, size=20000) # Organic clicks
df[node_lookup[4]] = 0.30 * df[node_lookup[0]] + 0.50 * df[node_lookup[1]] + 0.70 * df[node_lookup[2]] + np.random.normal(100000, 25000, size=(20000)) # Social clicks
df[node_lookup[5]] = df[node_lookup[3]] + df[node_lookup[4]] + np.random.normal(loc=0, scale=2000, size=20000) # Revenue

Entrenando al SCM

Ahora podemos entrenar el SCM usando el módulo GCM del paquete de Python DoWhy. Configuramos el proceso de generación de datos con relaciones lineales, por lo tanto, podemos usar la regresión de crestas como mecanismo causal para cada nodo no raíz:

# Setup graph
graph = nx.from_numpy_array(graph_actual, create_using=nx.DiGraph)
graph = nx.relabel_nodes(graph, node_lookup)

# Create SCM
causal_model = gcm.InvertibleStructuralCausalModel(graph)

causal_model.set_causal_mechanism('Demand', gcm.EmpiricalDistribution()) # Deamnd
causal_model.set_causal_mechanism('TV spend', gcm.EmpiricalDistribution()) # Brand spend
causal_model.set_causal_mechanism('Social spend', gcm.EmpiricalDistribution()) # Social spend

causal_model.set_causal_mechanism('Organic clicks', gcm.AdditiveNoiseModel(gcm.ml.create_ridge_regressor())) # Organic clicks
causal_model.set_causal_mechanism('Social clicks', gcm.AdditiveNoiseModel(gcm.ml.create_ridge_regressor())) # Social clicks
causal_model.set_causal_mechanism('Revenue', gcm.AdditiveNoiseModel(gcm.ml.create_ridge_regressor())) # Revenue

gcm.fit(causal_model, df)

Influencia causal intrínseca

Podemos calcular fácilmente la influencia causal intrínseca utilizando el módulo GCM. Lo hacemos y convertimos las aportaciones a porcentajes:

# calculate intrinsic causal influence
ici = gcm.intrinsic_causal_influence(causal_model, target_node='Revenue')

def convert_to_percentage(value_dictionary):
total_absolute_sum = np.sum([abs(v) for v in value_dictionary.values()])
return {k: round(abs(v) / total_absolute_sum * 100, 1) for k, v in value_dictionary.items()}

convert_to_percentage(ici)

Imagen generada por el usuario

Mostrémoslos en un gráfico de barras:

# Convert dictionary to DataFrame
df = pd.DataFrame(list(ici.items()), columns=['Node', 'Intrinsic Causal Influence'])

# Create a bar plot
plt.figure(figsize=(10, 6))
sns.barplot(x='Node', y='Intrinsic Causal Influence', data=df)

# Rotate x labels for better readability
plt.xticks(rotation=45)
plt.title('Bar Plot from Dictionary Data')
plt.show()

Imagen generada por el usuario

¿Son nuestros resultados intuitivos? Si echas un vistazo al código del proceso de generación de datos, verás que lo son. Preste mucha atención a lo que hereda cada nodo no raíz y al ruido adicional que se agrega.

El módulo de influencia causal intrínseca es realmente fácil de usar, pero no nos ayuda a comprender el método detrás de él. Para terminar, ¡exploremos el funcionamiento interno de la influencia causal intrínseca!

Influencia causal intrínseca: ¿cómo funciona?

Queremos estimar cuánto contribuye el término de ruido de cada nodo al nodo objetivo:

  • Vale la pena recordar que los nodos raíz simplemente se componen de un término de ruido.
  • En los nodos no raíz, separamos el término de ruido de lo que se heredó de los padres.
  • También incluimos el término de ruido del nodo objetivo. Esto podría interpretarse como la contribución de factores de confusión no observados (aunque también podría deberse a una especificación errónea del modelo).
  • Luego, los términos de ruido se utilizan para explicar la varianza en el nodo objetivo. Esto puede verse como un modelo con términos de ruido como características y el nodo objetivo como resultado.
  • El modelo se utiliza para estimar la distribución condicional del nodo objetivo dados subconjuntos de variables de ruido.
  • Luego se utiliza Shapley para estimar la contribución de cada término de ruido: si cambiar el término de ruido tiene poco impacto en el objetivo, entonces la influencia causal intrínseca será muy pequeña.

Hoy cubrimos cómo puede estimar la influencia causal intrínseca de sus campañas de marketing. Aquí hay algunos pensamientos finales:

  • La influencia causal intrínseca es un concepto poderoso que podría aplicarse en diferentes casos de uso, no solo en marketing.
  • Comprender el funcionamiento interno le ayudará a aplicarlo de forma más eficaz.
  • Identificar el DAG y estimar el gráfico con precisión es clave para obtener estimaciones razonables de la influencia causal intrínseca.
  • En el ejemplo de adquisición de marketing, es posible que desee pensar en agregar efectos retardados para el marketing de marca.