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