Considere el siguiente problema, que se planteó en una entrevista en la que estuve (pero no iba dirigida a mí). Parece engañosamente sencillo, pero luego resulta ser realmente difícil de responder bien:
Cada semana i un servicio de entrega de comida en línea tiene un cierto conjunto Pi de productos seleccionados entre su amplio surtido que necesita vender, antes de que caduquen.
Para motivar a la gente a comprar esos alimentos, la tienda puede enviar correos electrónicos al principio de la semana. Pero los clientes se molestan si reciben esos correos, así que el número de clientes que reciben un correo electrónico tiene que ser lo más bajo posible. Encuentre sólo a los clientes que cree que son propensos a comprar los productos seleccionados.
Los datos de los que dispone:
1) un amplio historial de compras de cada cliente en cada momento
2) todos los correos electrónicos anteriores que se enviaron aleatoriamente a un subconjunto de clientes
3) algunos datos generales sobre él como persona, encontrar tales clientes.
¿Cuál habría sido una buena solución para esto?
Ya he pasado horas pensando en esto, pero sólo he podido encontrar una solución trivial:
Considérelo como un problema de clasificación binaria sin ningún componente temporal (así que considere los datos de todas las semanas juntos como un único gran conjunto de datos) [esto es porque no conozco las series temporales]. Así, dados nuestros productos seleccionados P queremos saber qué tipo de clientes lo comprarán. Separamos los datos en un conjunto de entrenamiento-validación-prueba. A continuación, organizamos los datos de la siguiente manera: Codificar todos los datos categóricos con una codificación de un solo golpe. Utilizar los siguientes conjuntos de características (=columnas en el marco de datos que contiene todos los datos):
- La información disponible sobre cada cliente de 3)
- definir una clase (=característica=columna), que denote con 1 o 0 si ese cliente ha comprado ese producto en la semana después de que se le haya enviado un correo electrónico al principio de la semana (esto significa que para un mismo cliente tendremos tantas observaciones (=filas) como semanas haya). Por lo tanto, no utilizo ninguna información de su historial general de compras, sino sólo la forma en que los clientes han cambiado sus compras inmediatas debido al correo electrónico.
Por último, utilice su clasificador binario favorito y juegue hasta maximizar la precisión de la predicción.
Creo que un modelo así para resolver este problema habría sido realmente horrible. He aquí una crítica al modelo ilustrando algunos de los puntos esenciales que creo que no tendría en cuenta:
a) los clientes cambian su reacción a los correos electrónicos en términos de comportamiento de compra con el tiempo [¿hay alguna manera de ocuparse de esto sin usar series temporales? porque no sé casi nada sobre ellas].
b) el comportamiento de compra de los clientes individuales:
-a los clientes que nunca compraron lo que estaba en el correo electrónico, se les debe asignar una baja probabilidad de tener una respuesta de compra al nuevo correo electrónico
-No estoy seguro de que con este modelo incluso las personas que siempre compraron algunas de las cosas que se anunciaron en el correo electrónico tengan una alta probabilidad de comprar cosas nuevas. ¡Estos dos puntos me parecen esenciales para que el modelo los capte!
-algunos clientes pueden tener preferencias por determinados productos, lo que indicaría que si los productos que generalmente prefieren están en P definitivamente deberían recibir un correo electrónico, para motivarlos a comprar más de eso
c) No tengo en cuenta la influencia a largo plazo del correo electrónico: Actualmente utilizo implícitamente un límite para determinar la utilidad de la información que el cliente compró uno de los productos del correo electrónico: Si compró alguno de esos productos en la semana en la que se envió el correo electrónico, se supone que esa información es 100% útil (ya que se refleja en la característica que construyo), si lo compra en cualquier momento posterior se supone que esa información es 0% útil (ya que la ignoro en las características). En lugar de utilizar implícitamente dicha función de corte, creo que sería mejor si de alguna manera pudiera hacer esto explícito (pero no sé cómo) y utilizar alguna otra función que tenga un valor más bajo cuanto más tarden los clientes en comprar cosas del correo, para modelar la utilidad decreciente de esta información con el tiempo. Esto capturaría situaciones en las que algunos clientes compraron ese producto sólo, digamos, 2 semanas después de haber recibido el correo.
1 votos
Nota al margen: conoces la regresión lineal simple, ¿verdad? Pues bien, entonces conoce esencialmente las series temporales, porque los modelos más sencillos de la TSA son los siguientes: Suponga que tiene los mismos valores objetivo y1,...,yn entonces, en cada momento t, se utilizan las variables "retardadas yt−1,yt−2,...,yt−k como tú k -vector de características de entrada y luego hacer una regresión lineal. En ese sentido, puede mezclar inteligentemente la TSA con su modelo de "surfear en la ola del AHORA", simplemente incoporando características "habituales" o "retardadas". Ejemplos: ...
1 votos
En las últimas X semanas, ¿con qué frecuencia compró el cliente el producto? En las últimas X semanas, ¿con qué frecuencia reaccionó el cliente a un correo electrónico publicitario que anunciaba este producto? Aquí, X es una especie de hiperparámetro con el que hay que jugar... Sin embargo, en su caso, supongo que puede seleccionar una X muy alta, ya que la afinidad general por la pizza o el atún no va y viene, sino que se mantiene durante toda la vida: o te gusta o no te gusta :-)
0 votos
¡¡@FabianWerner Gracias, esta es una buena información!! ¿Cómo se llaman estos modelos sencillos de TSA que no son más que una regresión lineal disfrazada? Actualizaré mi modelo en los próximos días (a menos que alguien ofrezca una respuesta antes) después de leer un poco sobre esos modelos. Además, con "jugar" supongo que te refieres a "utilizar la validación cruzada (o algo similar) hasta encontrar su mínimo".
0 votos
El nombre es MA (media móvil). Es una parte del primer modelo estándar TSA AR(I)MA. Jugar alrededor no está formulado muy bien, pero sí, sólo la prueba de algunos valores para obtener una sensación de que los valores son "buenos". Además, yo no me preocuparía demasiado por b: una vez que seleccione un modo que sea lo suficientemente "complicado" como para recortar las "formas de plátano", etc. (como SVM, NN, RF, Gradient Boosting, ...) el modo averiguará si existen o no estos patrones. Lo que se podría hacer para apoyar al modelo en sus decisiones es codificar las probabilidades (supuestamente) "altas" de compra utilizando ciertos rangos de valores, es decir ...
0 votos
podría utilizar algo como e−time difference between ad email and product buy en la(s) última(s) semana(s). De este modo, el valor de la función es muy grande si los puntos en los que se envió el correo electrónico del anuncio y el momento en el que el cliente compró el producto están cerca y es muy poco si la diferencia es grande. Si hay alguna afirmación como "si el cliente compró el producto poco tiempo después del correo electrónico publicitario", el modelo puede detectar fácilmente este patrón porque sólo tiene que seleccionar "featureValue > threshold", donde threshold= e−7 más o menos.
0 votos
@FabianWerner 0) He pensado un poco en lo que has escrito y he hojeado un poco la literatura sobre los modelos de medias móviles, pero me temo que todavía no sé exactamente cómo definir las características para implementar tu idea.Además de mi confusión general, aquí hay algunos puntos concretos de los que no estoy seguro.
0 votos
1) ¿Quieres decir que debo mantener mi columna de 0s y 1s que indican si un cliente compró productos o no - pero en lugar de una columna, que resume todas las acciones de un cliente, debería utilizar k columnas, una para cada uno de los últimos k ¿Semanas?
0 votos
2) Estoy un poco confundido sobre el uso de la misma letra y (pero con diferentes índices) tanto para la salida como para la entrada - tal vez quiso decir como entrada yit−1,yit−2,…,yit−k para todos i=1,…,n ?
0 votos
3) ¿Por qué un modelo lo suficientemente no lineal como para "recortar una forma de plátano" podría descubrir los patrones de b)? ¿Podría darme quizás un ejemplo más sencillo para que pueda entender mejor por qué esos modelos tienen el poder de inferir esas relaciones?
0 votos
He entendido perfectamente tus dudas. Intentaré responder más tarde en forma de una respuesta más larga... Ahora mismo no puedo escribirla. Saludos, F