Netflix: Una pequeña vista a la compleja tecnología detrás del servicio más popular de streaming

Israel Yance
BigDataLatam
Published in
9 min readNov 26, 2019

Como usuarios de esta plataforma, quizá no pensamos tanto en todo lo complejo que puede haber detrás para que podamos ver nuestras series y películas favoritas.

Tomando como referencia tres artículos del blog de Netflix vamos a tratar de hacer una pequeña vista sobre lo referido a su sistema de recomendación con portadas personalizadas, construir y escalar Data Lineage para mejorar la confiabilidad de la infraestructura de datos y eficiencia, y cómo el lenguaje de programación Python es usado en la compañía.

1. SISTEMA DE RECOMENDACIÓN CON PORTADAS PERSONALIZADAS

Los servicios tecnológicos aprovechan toda la información posible para que sus usuarios usen sus servicios activamente y así mantener o incrementar su LTV (Life Time Value), que es la cantidad de valor monetario que un cliente contribuye al negocio durante toda su vida útil.

Por ejemplo Facebook busca incrementar el tiempo de uso para que sus usuarios vean más publicidad. Y en el caso de Netflix, que es un precio fijo constante, su estrategia es que los usuarios lo usen activamente para que no se den de baja en el servicio.

Para lograr ello, las empresas tecnológicas aprovechan toda la data que recopilan y crean algoritmos de machine learning con recomendaciones personalizadas para cada usuario.

Netflix usa un algoritmo de recomendación basado en el contenido que tienen, en la interacción del usuario con esos contenidos y en la actividad de otros usuarios con gustos y preferencias similares. Esto es explica en este artículo:

Pero Netflix va más allá. No solo basta las altas probabilidades con las mejores películas y series para recomendar, sino que también han personalizado las portadas en cada película y serie.

Así, por ejemplo, para una serie como Stranger Things podemos tener diferentes portadas:

Portadas para Stranger Things.

La portada puede resaltar a un actor que reconoce el usuario, capturar un momento emocionante como una persecución en automóvil, o contener una escena dramática que transmite la esencia de una película o serie.

Así por ejemplo, se muestra el proceso para seleccionar la portada para dos usuarios diferentes para la película Good Will Hunting. Un usuario que ha visto muchas películas románticas puede estar interesado en Good Will Hunting si se muestra una portada que contiene a Matt Damon y Minnie Driver, mientras que otro usuario que ha visto muchas comedias podría sentirse atraído por la película si se usa la portada que contiene a Robin Williams, un conocido comediante.

Diferente portada para un mismo título.

Desafíos
Entre los principales desafíos de este sistema está en que se necesitan datos representativos para ver la eficiencia de la portada para cada grupo. Por eso un porcentaje de usuarios será usado como prueba, pero esa prueba también influirá y será considerada para el propio usuario.

Otro desafío es el cambiar la portada de una serie o película en diferentes sesiones para poder llegar a conseguir la atención del usuario pero no llegar al punto de confundirlo.

También está el de evitar el clickbait. Que la portada sea lo más representativa posible para que no atraiga al usuario y que se sienta defraudado y que no complete de ver la serie o película.

Además está el desafío del área de ingeniería, de brindar las recomendaciones lo más rápido posible para no afectar la experiencia del usuario. Con algoritmos que se adaptan entre sí y basado en la eficiencia de las portadas.

Contextual bandits
Para entrenar los algoritmos de machine learning tradicionalmente se recopila un lote de datos de cómo los usuarios usan el servicio. Así, se realiza un A/B testing para probar el nuevo algoritmo y ponerlo a disposición en caso el nuevo algoritmo sea mejor que el anterior. Pero el problema de hacerlo de esa forma es que en todo el tiempo usado hasta recopilar los datos, entrenar el modelo y poner disponible el mejor algoritmo para todos los usuarios, muchos usuarios no se habrán beneficiado del nuevo modelo.

Para reducir esta pérdida, Netflix en vez de usar el tradicional batch machine learning usa el online machine learning. Para el caso específico de las recomendaciones de portadas se usa el framework de contextual bandits, que es una clase de algoritmo de aprendizaje online que trata de minimizar el arrepentimiento (regret).

Más información sobre contextual bandits:

Como el objetivo del contextual bandit es el de minimizar el arrepentimiento, trata de hacer una aleatorización y exploración de los datos de forma que tengan el costo mínimo. El modelo primero tiene que mostrar de forma aleatoria las portadas y esto varía dependiendo de las portadas candidatas y los usuarios totales a quienes se les mostrará. Esta aleatorización varía en función de la incertidumbre del modelo. Para obtener los datos y alimentar el modelo, se utiliza un pequeño porcentaje del catálogo de cada usuario en un pequeño porcentaje de usuarios. Lo cual asegura que el costo sea mínimo e imperceptible.

Performance evaluation

Netflix, para evaluar el algoritmo contextual bandit utiliza la técnica replay. La cual consiste el hacer preguntas en base a los datos de exploración recabados, evaluando los resultados de los diferentes escenarios.

Se recaba información de las portadas mostradas de manera aleatorias a los usuarios. Estas se comparan con las que hubieran tenido con la del algoritmo del modelo de producción. Y aquellas en que coinciden (marco negro), se calcula la fracción de reproducciones que se efectuaron (verdes entre el total de marcos).

Así, la técnica Replay permite ver con cuál algoritmo se obtiene mejor engagement.

Promedio del take fraction de las portadas (cuanto mayor, mejor) tomadas por los diferentes algoritmos basados ​​en la reproducción de datos de exploración. Random (verde) selecciona una imagen al azar. El algoritmo simple Bandit (amarillo) selecciona la imagen con la fracción de toma más alta. Los algoritmos contextuales de Bandit (azul y rosa) usan el contexto para seleccionar diferentes imágenes para diferentes miembros.
Comparación basada en el tipo de perfil. El contextual bandit selecciona la imagen de Robin Williams, un famoso comediante, para perfiles inclinados a la comedia, mientras selecciona una imagen de una pareja besándose para perfiles más inclinados hacia el romance.

2. CONSTRUIR Y ESCALAR EL DATA LINEAGE PARA MEJORAR LA CONFIABILIDAD DE LA ESTRUCTURA DE DATOS Y LA EFICIENCIA

Con el objetivo de que los cambio en datos de diferentes áreas no afecten las otras áreas que también la utilizan directa o indirectamente, Netflix decidió crear historias de usuarios centrados en comprender las dependencias de los datos. Basándose en lo siguiente:

“Proporcionar un sistema de linaje de datos completo y preciso que permita a los responsables de la toma de decisiones ganar momentos de verdad”.

Netflix Data Landscape

Freedom & Responsability (F&R) es el eje fundamental de la cultura de Netflix que busca capacitar a los equipos para que puedan entregar rápidamente innovación y que operar con libertad para satisfacer su misión. Para ello se basan en el panorama general donde puedan mapear todas las herramientas que requiere una arquitectura escalable, un diseño robusto, un equipo de ingeniería sólido y, sobre todo, una increíble colaboración entre funciones.

Data Landscape

Design Goals

Al inicio del proyecto definieron un conjunto de objetivos de diseño para ayudar a guiar la arquitectura y el trabajo de desarrollo del Data Lineage para ofrecer un sistema de linaje completo, preciso, confiable y escalable que mapee el diverso panorama de datos de Netflix. Fueron bajo estos principios:

  • Asegurar la integridad de los datos
  • Permitir una integración perfecta
  • Diseñar un modelo de datos flexible

Challenges

La diversa información con la que cuenta Netflix dificultaba la captura de datos, además el uso de Spark y sus actualizaciones con cambios inesperados les complicó más de una vez. Por eso decidieron tomar un modelo genérico para almacenar información y utilizar otras tecnologías como bases de datos de grafos, implementar capas de CRUD para ser consumidas por REST APIs, y más.

DataFlow

3. PYTHON EN NETFLIX

El lenguaje de programación Python es muy importante en Netflix, ya que es usado en todo el ciclo de vida de la empresa, desde decidir qué contenido mostrar y hasta operar la CDN para servir los vídeos a los 148 millones de usuarios. Además sus colaboradores contribuyen activamente con varios paquetes open-source de Python.

La popularidad de este lenguaje de programación ha ido aumentando debido a que es intuitivo y permite resolver problemas rápidamente. Además que continuamente se crean y/o actualizan librerías útiles que lo hacen más atractivo de aprender y usar.

Entre algunos de los usos de Python en Netflix se mencionan:

Open Connect

Open Connect es el CDN de Netflix. El CDN es contenido estático, y en el caso de Netflix es donde se alojan los vídeos que serán transmitidos a los usuarios según peticiones. Estos CDN se colocan lo más cerca de los usuarios finales para mejorar la experiencia de transmisión y además reducir los costos tanto de Netflix como de los proveedores de servicios de internet.

Para diseñar, construir y operar esta infraestructura de CDN, se utilizan diversos sistemas de software escritos en Python.

Demand Engineering

Demand Engineering es el área responsable de la distribución del tráfico, la gestión de la demanda y la eficiencia de la nube de Netflix.

Se usan las librerías de numpy y scipy para realizar análisis numéricos que organiza la conmutación por error, la librería boto3 para realizar cambios en la infraestructura de AWS, rq para ejecutar cargas de trabajo asincrónicas donde se envuelve todo en una capa delgada de API de Flask, un framework de desarrollo basado en Python.

Core

En esta área Python se utiliza para el trabajo analítico, estadístico y de alertas. Las librerías que se utilizan son numpy, scipy, ruptures, pandas que ayudan a automatizar el trabajo cuando señales de alertas indican problemas.

Monitoreo, alertas y remediación automática

También dentro del equipo de Insight Engineering que es el responsable de construir y operar las herramientas para obtener información operativa, alertas, diagnósticos y remediación automática. Para esto utilizan librerías y productos propios, como Spectator, Winston y Bolt.

Seguridad de la Información

Es el área encargada de la automatización de seguridad, clasificación de riesgos, reparación automática e identificación de vulnerabilidades. Acá se utilizan las libreríasde Python Security Monkey, Bless para proteger sus recursos SSH, Repokid para los ajustes de permisos AIM y Lemur para generar certificados LTS. Además proyectos como Prism.

Algoritmos personalizados

Se utiliza Python intensivamente para los diversos algoritmos de recomendación y de portadas. Las librerías más usadas son TensorFlow, Keras y PyTorch para Deep Neural Networks, XGBoost. Además de numpy, scipy, sklearn, matplotlib, pandas, cvxpy. Donde se utilizan los notebooks de Jupyter para probar diferentes enfoques.

Infraestructura de Machine Learning

Además de los algoritmos de machine learning se utiliza Metaflow, un framework de Python que facilita la ejecución de proyectos de ML desde la etapa de prototipo hasta la producción. Metaflow hace que se supere los límites de Python para trabajar optimizado y paralelamente.

Notebooks

Python juega un papel importante ya que con este lenguaje se desarrolla, depura, explora y crea prototipos con diferentes interacciones con el ecosistema de Jupyter.

Orquestación

Este equipo es el encargado del Big Data, siendo responsable de todos los servicios y herramientas para programar y ejecutar pipelines de ETL y Adhoc.

Se utiliza mayormente Python y con planificadores en notebooks de Jupyter que trabajan con Spark, Presto, etc.

Plataformas de Experimentación

El equipo de computación científica facilita las herramientas para que tanto científicos e ingenieros puedan desarrollar diferentes tipos de experimentos, como pruebas A/B. entre otros. Así se desarrollan innovaciones en tres frentes: datos, estadísticas y visualizaciones.

Así se usan estas herramientas:

  • Metrics Repo, un framework basado en PyPika para consultas SQL.
  • Librerías en Python y R para inferencias como PyArrow y RPy2.
  • Librería de visualización basada en Plotly.

Partner Ecosystem

Es el área encargada de probar las aplicaciones de Netflix en los diferentes dispositivos. Para realizar estas tareas está ampliando el uso de Python, además utilizando la librería de TensorFlow para determinar qué pruebas tienen más probabilidades de mostrar problemas en qué dispositivos.

Video Encoding y Media Cloud Engineering

Se codifica y decodifica el catálogo de Netflix para mediante algoritmos de machine learning obtener insights.

Se usa Python para alrededor de 50 proyectos como vmaf y mezzfs, creando soluciones de computer visión usando la plataforma media map-reduce llamada Archer. Además de contribuir con algunas herramientas para facilitar el desarrollo/distribución de proyectos de Python como setupmeta y pickley.

Content Machine Learning, Science & Analytics

El equipo de Content Machine Learning usa Python intensivamente para el desarrollo de modelos de machine learning que son el núcleo para pronosticar el tamaño de la audiencia, la audiencia y otras métricas de demanda para todo el contenido.

--

--