Rekko Challenge

Rekko Challenge


Hoy estamos lanzando el Rekko Challenge 2019 , una competencia de aprendizaje automático del cine en línea Okko .


Le sugerimos que cree un sistema de recomendación sobre los datos reales de uno de los cines en línea más grandes de Rusia. Estamos seguros de que esta tarea será interesante tanto para principiantes como para especialistas experimentados. Intentamos mantener el máximo alcance para la creatividad, sin sobrecargarlo con conjuntos de datos de gigabytes con cientos de características precalculadas.


Lea más sobre Okko, la tarea, los datos, los premios y las reglas, a continuación.


Desafío


Usted tiene acceso a los datos sobre todas las vistas, calificaciones y adiciones a las películas y series "Memorizadas" por el usuario por un período de N días (N> 60), así como a toda la metainformación sobre el contenido. Es necesario predecir qué películas y series comprará o verá el usuario mediante suscripción durante los próximos 60 días.


En la siguiente sección, tratamos de describir lo mínimo que necesita saber sobre los cines en línea para comprender rápidamente los datos y comenzar a analizarlos. Si esta información no es relevante para usted, puede proceder inmediatamente a la descripción de los datos .


Acerca de nuestro servicio


Si un usuario quiere ver legalmente una película en Internet, tiene tres formas principales.


La primera forma es mirar gratis, interrumpiendo constantemente los comerciales ( AVOD , Advertising Video On Demand). El segundo es comprar una película para su colección o alquiler ( TVOD , Transactional Video On Demand). El tercero es suscribirse por un período determinado ( SVOD , Subscription Video On Demand).


Okko solo funciona en modelos TVOD y SVOD. No hay publicidad en absoluto en nuestro servicio.


En total, el servicio tiene un poco más de 10 mil películas y series, alrededor de 6 mil de ellas están disponibles por suscripción, el resto son solo para compra o alquiler. Al mismo tiempo, se puede comprar casi cualquier contenido de suscripción. Una excepción es, por ejemplo, los programas de televisión de Amediateka , solo se pueden ver por suscripción.


Distribución de contenido por modelo de consumo.


Seg√ļn qu√© modelo estar√° disponible la pel√≠cula, depende en gran medida del estudio que posea los derechos. Concluyen un contrato con los cines en l√≠nea, que estipula cu√°ndo y para qu√© derechos estar√° disponible la pel√≠cula. Como regla general, las condiciones son las mismas para todos los actores del mercado, pero a veces los estudios hacen concesiones a algunos cines u ofrecen condiciones m√°s favorables por m√°s dinero. Entonces hay exclusivas.


Por ejemplo, las principales innovaciones globales no entran en la suscripción de inmediato, sino solo después de 2-3 meses después de aparecer en el servicio. Además, en las primeras semanas ni siquiera se pueden alquilar, solo está disponible la oportunidad de comprar para siempre. Pero las películas rusas pueden estar disponibles por suscripción inmediatamente después del lanzamiento y, a veces, incluso simultáneamente con el inicio del alquiler en los cines fuera de línea.


Cuando el contrato expira, la película deja de estar disponible, hasta la extensión del contrato vencido o la conclusión de uno nuevo.


Ejemplo de tarjeta de película inaccesible


Los per√≠odos de falta de derechos sobre el contenido son claramente visibles en los gr√°ficos del n√ļmero de vistas. A continuaci√≥n, por ejemplo, hay un gr√°fico de la pel√≠cula "John Wick 2". En primer lugar, puede parecer que el atraco se detuvo por un par de meses, pero no: los derechos hab√≠an terminado.


Gráfico de vistas de la película "John Wick 2"


El pico más alto en el gráfico anterior (marcado con una línea vertical) coincide con la fecha en que se agregó la película a la suscripción: este es un comportamiento muy característico para las novedades de alto perfil. Nuestro servicio tiene 12 suscripciones:


  • Ocho tem√°ticas
  • Serie de televisi√≥n Amediateka,
  • Serie de televisi√≥n ABC,
  • Pel√≠culas y series rusas del servicio START,
  • Pel√≠culas 4K

Y dos paquetes de suscripción: Optimal, que incluye todas las suscripciones temáticas, y Optimal + Amediateka.


Interfaz de suscripción


Los m√°s populares, por supuesto, son metapaquetes. De las suscripciones tem√°ticas, los usuarios prefieren World Cinema y Our Cinema.



Pocos usuarios ven películas solo por suscripción, la mayoría solo compra películas o compra además de la suscripción.


Muy a menudo, los usuarios eligen comprar nuevos art√≠culos para el alquiler actual y los principales estrenos del a√Īo pasado.


La fuente más popular de compras en la aplicación es la sección "Recomendaciones", seguida de "Buscar", "Noticias" y "Catálogo". Los usuarios compran parte de las películas de "Similar" y "Memorizado".



Uno de los principales problemas con los que estamos luchando activamente en Okko es el problema de los usuarios que eligen contenido. Si observa el gr√°fico de la probabilidad de realizar una compra versus el tiempo que pas√≥ en el servicio (datos del a√Īo anterior), ver√° que los usuarios est√°n listos para elegir y comprar una pel√≠cula dentro de los primeros 10 minutos, entonces la probabilidad de una compra est√° disminuyendo r√°pidamente. Al mismo tiempo, sigue habiendo una gran parte de los usuarios que pasan en el servicio de media hora a una hora y no pueden elegir contenido adecuado para ellos.


10 minutos, no tanto. Durante este tiempo, el usuario, físicamente incapaz de estudiar el catálogo en detalle y seleccionar el contenido que le gusta.


Aquí es donde entra Rekko, el sistema de recomendación interna para el cine en línea Okko. Rekko actualmente opera en dos secciones del servicio: "Recomendaciones" y "Similar".


Sección de recomendación de televisión


Similar a la televisión


Para evaluar la satisfacción del usuario con el contenido, analizamos el hecho de la compra, las vistas por suscripción, el tiempo de visualización, agregando a las calificaciones memorizadas y de los usuarios.


La escala de calificación en Okko está representada por cinco asteriscos con medias divisiones: toma valores enteros de 0 a 10.


Interfaz de calificación


El usuario puede calificar la pel√≠cula en cualquier momento, independientemente del hecho de compra o visualizaci√≥n. La puntuaci√≥n se puede cambiar un n√ļmero ilimitado de veces, pero no se puede deshacer.


Puede "recordar" una película en cualquier momento, luego aparecerá en "recordada" en el perfil del usuario. Del mismo modo, se puede eliminar de allí.


Interfaz de almacenamiento


Películas grabadas en perfil


El trabajo en Rekko comenz√≥ exactamente hace un a√Īo y en este momento, de acuerdo con las pruebas A / B, nos permiti√≥ aumentar el n√ļmero promedio de compras en un 4%, los ingresos por transacciones en un 3%, la conversi√≥n a suscripci√≥n en un 5%, y los usuarios comenzaron a elegir pel√≠culas un 18% m√°s r√°pido .



Datos


Todos los datos, excepto el tiempo de visualización y las clasificaciones, están anonimizados o distorsionados. El tiempo se expresa en unidades abstractas para las cuales se preserva la relación de orden y distancia.


transacciones.csv


Registros de todas las transacciones y vistas de contenido en ellos durante el período de capacitación. La transacción aquí es la compra de una película para siempre, ya sea en alquiler o para iniciar la visualización por suscripción.


element_uiduser_uidconsumo_modotsmirado_horatipo_dispositivofabricante_dispositivo
33365177S44305181.218020642820 050
481593316S44305180.60602762629890 011
4128262355S44305180.414445828330 050

  • element_uid : identificador de elemento
  • user_uid : ID de usuario
  • consumption_mode - tipo de consumo ( P - compra, R - alquiler, S - vista por suscripci√≥n)
  • ts - tiempo de transacci√≥n
  • watched_time : la cantidad de segundos observados por el usuario durante los segundos de esta transacci√≥n
  • device_type : tipo an√≥nimo de dispositivo desde el que se realiz√≥ la transacci√≥n
  • device_manufacturer : fabricante an√≥nimo del dispositivo desde el que se realiz√≥ la transacci√≥n

Distribución de tiempo de observación


ratings.csv


Informaci√≥n sobre valoraciones de usuarios para el per√≠odo de formaci√≥n. La informaci√≥n se agrega, es decir Si el usuario cambi√≥ su calificaci√≥n, solo se presentar√° el √ļltimo valor en la tabla.


user_uidelement_uidcalificaciónts
57125213641044305174.26309871
6314030371044305139.28281821
4438174363844305136.20584908

  • element_uid : identificador de elemento
  • user_uid : ID de usuario
  • rating - rating definido por el usuario (de 0 a 10 )
  • ts - tiempo de clasificaci√≥n

Distribución de calificaciones


bookmarks.csv


Los hechos que los usuarios agregan una película al "recordado". La información se agrega, es decir si el usuario eliminó la película de "Guardado", no habrá registro de agregarla allí en la tabla.


user_uidelement_uidts
301135718544305161.30743926
301135408344305160.01187332
3011351015844305157.74463292

  • element_uid : identificador de elemento
  • user_uid : ID de usuario
  • ts - hora de agregar la pel√≠cula a la "recordada"

catalogue.json


Metainformación sobre todos los elementos recomendados: películas, series y películas en serie.


 { "1983": { "type": "movie", "availability": ["purchase", "rent", "subscription"], "duration": 140, "feature_1": 1657223.396513469, "feature_2": 0.7536096584, "feature_3": 39, "feature_4": 1.1194091265, "feature_5": 0.0, "attributes": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...] }, "2166": { "type": "movie", "availability": ["purchase", "rent"], "duration": 110, "feature_1": 36764165.87817783, "feature_2": 0.7360206399, "feature_3": 11, "feature_4": 1.1386044027, "feature_5": 0.6547073468, "attributes": [16738, 13697, 1066, 1089, 7, 5318, 308, 54, 170, 33, ...] }, ... } 

  • type : toma los valores de movie , multipart_movie o series
  • duration : la duraci√≥n en minutos, redondeada a decenas (la duraci√≥n de la serie para series y pel√≠culas en serie)
  • availability : derechos disponibles sobre el contenido (puede contener los valores de purchase , rent y subscription )
  • attributes : una bolsa de algunos atributos an√≥nimos
  • feature_1..5 : cinco materiales anonimizados y caracter√≠sticas ordinales

Los derechos disponibles se indican al final del período de capacitación y al comienzo de la prueba.


Importante: en json, las teclas del diccionario solo pueden ser cadenas, as√≠ que aseg√ļrese de convertirlas a un n√ļmero si lee los identificadores en las tablas como n√ļmeros (haga esto para ahorrar memoria).


Distribución de características en el catálogo.


Métrica


Como m√©trica, utilizamos la precisi√≥n media promedio (MAP) para 20 elementos, pero ligeramente modificada. Durante el per√≠odo de prueba, el usuario podr√≠a consumir menos de 20 pel√≠culas. Si en este caso consideramos un MAP honesto, el l√≠mite superior de la m√©trica ser√° menor que uno y los valores ser√°n peque√Īos. Por lo tanto, si el usuario ha consumido menos de 20 elementos, normalizamos por su n√ļmero y no por 20.


 mboxMNAP@20= frac1 lvertU rvert sumu inU frac1 min(nu,20) sumi=120ru(i)pu@i


pu@k= frac1k sumi=1kru(i)


ru(i)- se encuentra iEl elemento predicho en el conjunto de elementos consumidos durante el per√≠odo de prueba por el usuario u, nuEs el tama√Īo de este conjunto. Si de repente se olvidan las m√©tricas de calidad de clasificaci√≥n, hay un excelente art√≠culo sobre ellas en el centro


Código métrico en Cython
 def average_precision( dict data_true, dict data_predicted, const unsigned long int k ) -> float: cdef: unsigned long int n_items_predicted unsigned long int n_items_true unsigned long int n_correct_items unsigned long int item_idx double average_precision_sum double precision set items_true list items_predicted if not data_true: raise ValueError('data_true is empty') average_precision_sum = 0.0 for key, items_true in data_true.items(): items_predicted = data_predicted.get(key, []) n_items_true = len(items_true) n_items_predicted = min(len(items_predicted), k) if n_items_true == 0 or n_items_predicted == 0: continue n_correct_items = 0 precision = 0.0 for item_idx in range(n_items_predicted): if items_predicted[item_idx] in items_true: n_correct_items += 1 precision += <double>n_correct_items / <double>(item_idx + 1) average_precision_sum += <double>precision / <double>min(n_items_true, k) return average_precision_sum / <double>len(data_true) def metric(true_data, predicted_data, k=20): true_data_set = {k: set(v) for k, v in true_data.items()} return average_precision(true_data_set, predicted_data, k=k) 

Premios y reglas


El fondo de premios es de 600 mil rublos:


  • 300 mil recibir√°n el ganador,
  • 200 mil - el participante en segundo lugar
  • 100 mil - un participante en el tercer lugar.

Las reglas son estándar: no interrumpa la plataforma, use solo una cuenta, evite el intercambio de código privado con otros participantes y no sea un empleado de Okko y Rambler.


Como empezar


Puede ser difícil incluso para profesionales experimentados comenzar a participar en la competencia: necesita descubrir rápidamente una nueva área de dominio, comprender y analizar datos y clasificar nuevas bibliotecas.


Esperamos que en este artículo podamos sumergirlo en el tema del cine en línea y describir los datos con suficiente detalle. En el archivo con la tarea, encontrará el archivo baseline.ipynb , que contiene código para cargar datos y un ejemplo de una solución simple que utiliza el algoritmo de K vecinos más cercanos.


Si alg√ļn punto de la descripci√≥n de los datos y el dominio del dominio sigue sin estar claro, estaremos encantados de responder sus preguntas en los comentarios. Tambi√©n puede hacer preguntas en el canal de telegramas @boosterspro : la discusi√≥n principal de la competencia se llevar√° a cabo all√≠.


Entonces, cómo comenzar:


  1. Reg√≠strese en boosters.pro y √ļnase a @boosterspro ;
  2. Descargue los datos en la página de la competencia o aquí ;
  3. Abra baseline.ipynb , instale los paquetes necesarios, ejecute todo el código y descargue su primera solución;
  4. Intente modificar la línea base para mejorar el rendimiento;
  5. Experimento!

El Rekko Challenge comienza hoy, 18 de febrero. Las decisiones se toman hasta el 18 de abril, 23:59:59 hora de Mosc√ļ.


¬°Estamos esperando a todos y buena suerte!


Por cierto, estamos buscando empleados . Incluido el desarrollador de sistemas de recomendación.


UPD 26/02/2019: Encontró un error en la formación de datos de prueba, los reemplazó junto con el archivo test_users.json . Todos los participantes reciben intentos adicionales.

Source: https://habr.com/ru/post/439180/


All Articles