El marketing en X5 es una gran cantidad de datos. Pyaterochka, por ejemplo, envía más de 30 millones de comunicaciones cada mes, y este número está en constante crecimiento. Se pueden enviar varias ofertas a un cliente a la vez, y es importante elegir cuáles correctamente. Las acciones de la tienda deben ser interesantes para el cliente y justificadas económicamente para el minorista. En esta publicación, le diremos cómo comenzamos a determinar ofertas verdaderamente populares utilizando el aprendizaje automático y eliminar el efecto del spam.

Para mejorar la comunicación con los clientes de Pyaterochka, Perekrestok y Karusel, un gran equipo trabaja en X5 Retail Group.
Ahora, mantener este sistema requiere el trabajo de docenas de personas y sistemas: acumulación precisa de datos en Oracle, análisis de datos y configuración de campañas en SAS, configuración de reglas de bonificación en Comarch. Todos los días, los analistas toman decisiones sobre cómo elegir la oferta más relevante en este momento, eligiendo entre una gran variedad de opciones, en base a datos históricos sobre los resultados de la acción. También estamos trabajando para garantizar que las comunicaciones se aborden y no tengan nada que ver con el correo no deseado.
Pensamos en cómo traducir el proceso de selección de una oferta relevante para el cliente al modo automático mediante el aprendizaje automático, de modo que:
- información acumulada sobre clientes y campañas pasadas
- el sistema mismo aprendió de nuevos datos
- la planificación se calculó más de un paso adelante
Así que llegamos a la realización de sistemas autoorganizados y comenzó la era del desarrollo del sistema de aprendizaje por refuerzo en X5.
Un poco sobre el aprendizaje por refuerzo* RL (aprendizaje de refuerzo) es aprendizaje reforzado. Una de las formas de aprendizaje automático, durante la cual se entrena el sistema de prueba (agente), interactuando con un determinado entorno.
La teoría del aprendizaje reforzado opera en dos conceptos: acción y estado. Según el estado del objeto, el algoritmo decide la elección de las acciones. Como resultado de la acción perfecta, el objeto cae en un nuevo estado y así sucesivamente.

Suponiendo que:
- agente - cliente
- acción - comunicación con el cliente
- estado - estado (conjunto de métricas) del cliente
- función objetivo: mayor comportamiento del cliente (por ejemplo, aumentar los ingresos o responder a una campaña objetivo)
... entonces el sistema descrito debe resolver el objetivo establecido y los propios agentes (clientes) elegirán sus acciones (recompensas y campañas) para su comodidad y relaciones significativas con la tienda.
Lo que la mente mundial ofrece RLPrimero, buscamos ejemplos de soluciones a tales problemas, descritos en fuentes abiertas.
Encontré algunos ejemplos interesantes:
Sobre herramientas:Acerca de aplicar RL a tareas de marketing similares:Pero todos ellos no se ajustaban a nuestro caso o no inspiraban confianza.
Etapa 1. Soluciones prototipoPor lo tanto, decidimos desarrollar nuestro enfoque.
Para minimizar los riesgos y no entrar en una situación en la que el sistema se desarrolló durante mucho tiempo sin un uso real, y luego no despegó al final, decidimos comenzar con un prototipo que no implementaría el método RL en su forma pura, pero tenía un resultado comercial comprensible.
La base de las implementaciones básicas del aprendizaje reforzado es la matriz de estado-acción-resultado, que se actualiza cada vez que se recibe nueva información del entorno.
Para reducir el espacio de estado, como parte del prototipo, se realizó una transición del cliente al segmento, donde todos los clientes se dividieron en 29 grupos según los parámetros:
- cheque promedio
- frecuencia de compras
- estabilidad de la canasta
- llenado de canastas
- lealtad del cliente (la proporción del número de semanas con compras al número de semanas durante las cuales una persona participó en el programa de lealtad de la tienda)
Por lo tanto, la tarea se redujo a aprender una matriz de la siguiente forma:

En la intersección, la matriz debe rellenarse con el valor de la función objetivo.
En la primera versión del algoritmo, la respuesta específica a la campaña se seleccionó en función del objetivo.
El primer prototipo que desarrollamos en un par de semanas en SQL (Oracle) y Python. Teníamos datos históricos de comunicaciones, por lo que pudimos llenar parcialmente la matriz con el peso estimado de los pares de "oferta a oferta". Desafortunadamente, resultó que para algunos pares no hay suficientes datos. Esto no nos detuvo; deseábamos pruebas de combate.
El Departamento de Marketing de Pyaterochka nos confió datos de dos millones de clientes durante 10 semanas de experimentos. En este momento, estos clientes estaban desconectados de todas las demás comunicaciones. Identificamos a la mitad de los clientes en el grupo de control, en los grupos restantes probamos el prototipo.
La teoría de RL nos dijo que no solo deberíamos elegir la mejor acción, sino también continuar aprendiendo. Por lo tanto, cada vez que probamos una campaña aleatoria en un pequeño porcentaje de clientes. En consecuencia, los clientes restantes recibieron la mejor oferta (la mejor campaña). Por lo tanto, obtuvimos nuestra implementación del método ε - codicioso de elegir la oferta más óptima.

Después de tres lanzamientos del sistema, quedó claro que elegir la mejor campaña de respuesta no conduce a un aumento en el RTO específico por campaña (este indicador es la medida principal de la efectividad de cualquier campaña dirigida en cualquier organización).
Al cambiar la función objetivo (y, por lo tanto, el algoritmo para elegir la mejor campaña) directamente a RTO incremental, aprendimos que las campañas más exitosas desde este punto de vista no son rentables en términos de ROI.
Entonces, para el octavo lanzamiento del sistema, cambiamos la función del objetivo por tercera vez, ahora con ROI.
Conclusiones del desarrollo del prototipo.A continuación se muestran los gráficos de rendimiento para los principales indicadores:
- Respuesta neta del cliente a la comunicación
- RTO incremental
- Marginalidad



Puede notar que para el último lanzamiento, la eficiencia del prototipo (en RTO incremental) excedió el resultado promedio de las campañas lanzadas por analistas, y si consideramos solo los "mejores" segmentos y ofertas, la diferencia es más del doble.
Para el futuro, hemos sacado las siguientes conclusiones para nosotros mismos:
- Hablar con un negocio de KPI por adelantado puede no ser suficiente. Los KPI de un cliente comercial también están cambiando. (Entonces pasamos de RTO a la marginalidad).
- Los objetivos indirectos (en nuestro caso, la respuesta) son buenos, pero tarde o temprano se le pedirá que tenga en cuenta los indicadores de rendimiento directos.
- Se encontraron los mejores pares de campaña de segmento, que muestran consistentemente buenos resultados. Estas campañas se han lanzado en toda la base y generan ingresos regularmente.
Total:
- circuito funciona
- Vale la pena tener en cuenta los costos del cliente (la victoria en el IRTI no aseguró el crecimiento del ROI)
- Me gustaría tener en cuenta el historial de respuestas
- ahora no da tanto miedo ir al nivel del cliente
Etapa 2. Terminamos el sistema.Inspirados en los resultados de la primera etapa, decidimos finalizar el sistema y realizar las siguientes mejoras funcionales:
1) pase de elegir una oferta a un segmento de clientes a elegir una oferta individual para un cliente, describiéndola con un conjunto de métricas:
- Último indicador de respuesta de oferta
- La proporción de la toma de fuerza del cliente durante 2 semanas a la toma de fuerza durante 6 semanas
- La relación entre el número de días desde la última compra y la distancia promedio entre transacciones
- Número de semanas desde la última comunicación.
- La relación entre la cantidad de bonos utilizados por mes y la cantidad de RTO por mes
- Alcanzar la meta en las dos semanas anteriores
- Banderas de respuesta a ofertas con diferentes tipos de recompensas
- elija no 1, sino una cadena de dos campañas posteriores
2) aclarar la función de la meta, añadiéndole, además de la respuesta, el crecimiento del PTO :).
Ahora, al elegir una oferta individual para el cliente, nos centramos en el valor esperado de la función objetivo Q1:
- Q = 1 si el cliente respondió a la campaña y su RTO de 2 semanas durante el episodio aumentó en m%
- Q = 0, si el cliente NO respondió a la campaña y su RTO de 2 semanas durante el episodio aumentó en m%
- Q = 0, si el cliente respondió a la campaña y su RTO de 2 semanas durante el episodio creció MENOS que en un m%
- Q = -1, si el cliente NO respondió a la campaña y su RTO de 2 semanas durante el episodio creció MENOS que en m%
Ahora, poner a prueba el segundo enfoque está en pleno apogeo, pero ya hemos superado los resultados anteriores.
Que sigueAfortunadamente, los resultados deleitan no solo al equipo de implementación y desarrollo, sino también a los clientes comerciales, por lo tanto, en el futuro, además de las mejoras funcionales, se planea crear sistemas similares que funcionen para el marketing en tiempo real y en línea.
Además, un lector atento notará que hasta ahora no hemos usado RL en su forma más pura, sino solo en su concepto. Sin embargo, incluso con esta simplificación, observamos un resultado positivo y ahora estamos listos para seguir adelante, lo que complica nuestro algoritmo. Con nuestro ejemplo, queremos inspirar a otros a ir "de lo simple a lo complejo".
Edition Habr X5 agradece a la empresa Glowbyte Consulting por la ayuda en la preparación de una publicación. El piloto fue completado por un equipo combinado de seis especialistas de Pyaterochka y Glowbyte.
Por cierto, estamos buscando un gerente de desarrollo de productos Big Data, especialista en datos, especialista en análisis y gerente de programas de lealtad.