Valar Morghulis… o, Cómo Predecir las Muertes en Game of Thrones

There’s an english version of this post, here
CUIDADO! Este post contiene Spoilers

Puede sonar a cuento viejo, porque ya se han creado modelos que tratan de predecir quién va a morir en Game Of Thrones (cómo aquí, aquí y aquí) pero quise intentarlo yo también, porque dos cosas son ciertas: No hay dos modelos iguales y…. Me encanta la serie Game Of Thrones!

Game of Data

Game of Thrones es una serie de televisión basada en una saga de libros llamada “Canción de Hielo y Fuego” (El primer libro, se llama “Game of Thrones”), escrita por George R.R. Martin (GRRM).

El primer libro fue publicado en 1996 y, en el 2011, HBO lanzó la primera temporada de la serie basada en este primer libro. La serie de televisión tuvo tanto éxito, que en el año 2015, cuando se terminó de emitir la temporada 5, basada en el libro 5, el autor aún no había terminado de escribir el libro 6. Para no dejar a los fans esperando, HBO se alió con GRRM para que escribieran el guión directamente para televisión. De esta forma se lanzaron las temporadas 6 y 7 y medio planeta está esperando la temporada 8 el 14 de abril (2019)

Como la serie tiene tanto éxito y es famosa por matar a los personajes principales (Es cierto, no puedes tener un personaje favorito porque se muere, y poco a poco otros personajes que no creías van tomando importancia…. y posiblemente mueran también), quise hacer un modelo en Python de Machine Learning, para tratar de encontrar algún patrón y predecir: Quién muere en esta última temporada?

Para ello me basé en las siguientes fuentes:

Metodología para usar los datos en la predicción
  • Información de los 5 libros que existen hasta el momento (Wiki de “Cancion de Hielo y Fuego”): Nombre, título, género, edad, nobleza, casa, en qué libros aparece y si está muerto en el libro
  • Información de las 6 primeras temporadas (Kaggle): Nombre, Actor, género, edad, casa, temporadas en las que aparece, tiempo en pantalla en cada una y si está muerto en el programa.
  • Información técnica de los capítulos (GitHub de Mark Needham, un fan muy amable que recopiló estos datos): Capítulo, título, rating, número de televidentes, director y escritores.

Con esta información (5 libros y 6 primeras temporadas = 72 variables!) pienso entrenar el modelo, después, con los datos de la séptima temporada, pienso predecir la variable “Está muerto en el programa?” (isDead_shw)

You Know Nothing, Data Scientist

Algunas cosas curiosas a las que me enfrenté en esta fase del modelo:

  • Como los sets vienen de fuentes diferentes, tratar de unirlos por nombre es difícil (En un dataset estaba “Eddard Stark” y en el otro “Ned Stark”, por ejemplo). En estos casos recomiendo usar la librería “FuzzyWuzzy”), que permite encontrar la palabra más parecida a otra en un arreglo.
  • Se tiene la variable “house_shw” que es la casa a la que el personaje le es fiel y la variable “culture_shw” que es la casa en la que el personaje nació. Para muchos personajes, no es la misma. Lo mismo pasa con las variables del libro (“house_bk” y “culture_bk”)
  • Estas casas, de acuerdo al libro, son más de 40! Para simplificar el modelo, trabajé únicamente con las 10 casas con más personajes y a los demás les asigne casa “Other”, tanto para casa-lealtad como para casa-familia.
  • En este dataset los personajes no vuelven a la vida. Se tiene el estado de los personajes al final del libro 5 y de la temporada 6 (T6). Si un personaje llegase a resucitar en la temporada 7 (T7)se usará ese nuevo registro. la variable objetivo isDead_shw solo tiene valores 1–0.
  • Este dataset solo incluye personajes humanos, no incluye: dragones, lobos, caminantes blancos ni niños del bosque.
  • Los registros que no sufrieron ningún cambio de la T6 a la T7, fueron removidos del set de entrenamiento, pues de lo contrario, el modelo “memorizaría” que el registro está vivo en la T6 y, si es igual en la T7, la predicción será “vivo”, sin analizar nada.

Para calcular los datos de la T7, se asume lo siguiente (Spoiler Alert!):

  • Personajes vivos en T6, que murieron en T7: Leona Tyrell, Taena of Myrr, Peter Baelish y Kevan Lannister.
  • Personajes que cambiaron su casa-lealtad: Brienne of Tarth (Bolton a Stark), Bronn (Other a Lannister)
  • Personajes que cambiaron su casa-familia: Jon Snow
  • Personajes que se asumen vivos, pues no se sabe nada de ellos en la T7: Ellaria Sand, Meera Reed
  • Personajes que se asumen muertos, pues no se sabe nada de ellos en la T7: Benjen Stark

The Things we do for Data

A pesar de que el show de televisión es famoso por “matar muchos personajes”, la realidad de los libros no es igual. En los libros, se dan muchos más detalles y hay muchos más personajes (más de 2000!) por lo que hay muchísimos que no mueren, en el show se presentan únicamente a los personajes “principales” (Aún así, son 115!) y son éstos los que se mueren, como se puede ver en las gráficas abajo, a la izquierda (Porcentaje de personajes fallecidos).

Análisis de personajes Vivos/Muertos en el show y en el libro

Analizando ahora por temporada/libro (gráfica de la derecha), vemos que al principio, en la T1, el show parece seguir el libro casi al pie de la letra.

En la T3, sin embargo, se ve una gran diferencia entre el número de muertos en el libro yen el show. En esta temporada hay un capítulo (“The Rains of Castamere”) en el que, sin dar muchos spoilers, matan a varios personajes en una sola escena. Sin embargo, en el show solamente muestran a personajes principales que el espectador a seguido durante toda la serie. En el libro, la escena es mucho más detallada, y los muertos “conocidos” son muchos más que en el show.

En la T4 pasa todo lo contrario: más muertos en el show que en los libros. Hay dos escenas en concreto, en las que se cree que pasa esto: Es aquí cuando muere Shae (En el libro 3 y en el show T4), pero en el show hay varias escenas en las que mueren otras prostitutas que no están en el libro. También es aquí cuando muere Ygritte (En el libro 3 y en el show T4), junto con varios amigos salvajes que eran conocidos en el show, pero no tanto en los libros.

Es aquí donde empieza a tener importancia la popularidad de los personajes y del show: Qué tantas libertades se estarán tomando los escritores de las últimas temporadas alejándose de los libros? La gráfica muestra, por ejemplo, que la T6, cuando ya no hay libros para basar la serie, es una de las temporadas con mayor cantidad de personajes fallecidos. Será por el rating?

Como una opinión completamente personal, ésta Data Scientist cree que la resurrección de cierto personaje fue producto de rating, presión del público y peticiones por redes sociales, más que idea del mismo escritor, pero… nunca lo sabremos… es una buena idea para un nuevo análisis…

I model and I know things

El problema se abordó usando dos sets de datos:

  • Personajes que aparecen en el libro Y en el show (115 personajes, 65 muertos)
  • Personajes que aparecen en el libro, pero incluyendo sus datos en el show (2011 personajes, 65 muertos)

La cantidad de personajes marcados como isDead_shw=1 (fallecido) es la misma, pues en ambos casos estamos buscando los fallecidos en el show. Otro modelo interesante sería tratar de predecir las muertes en el libro, para eso todavía queda tiempo.

Se ejecutaron los siguientes modelos y estos son sus resultados:

Modelos probados con métricas para elegir el mejor

Al parecer, los modelos funcionan mejor usando el set completo de personajes de los libros, pues tiene más muestras para determinar personajes vivos y diferenciarlos de los fallecidos. Esta decisión no se tomó en base al accuracy, debido al desbalance del modelo, sino de acuerdo principalmente al recall (Cuántas veces el modelo acertó en personajes realmente fallecidos), pues no quiero pasar por alto ninguna muerte; y la precisión (Cuantas veces que el modelo dijo “fallecido”, acertó), pues tampoco quiero decir que un personaje muere y realmente no lo hace, el modelo perdería credibilidad.

Con éstos criterios se eligieron cuatro modelos para realizar un mayor análisis: Regresión Logística (tv), Regresión Logística (libros), SVM (tv) y Random Forest (tv). Vamos ahora a revisar la importancia que le da cada uno de estos modelos a cada una de las 72 variables:

Importancia de Variables para los cuatro modelos seleccionados
  • Regresión Logística (tv): El modelo le da mayor importancia al tiempo en pantalla, lo cuál es casi obvio, si un personaje deja de aparecer, probablemente se murió. Le da una importancia mayor considerable a la T2.
  • SVM y Random Forest (tv): Le dan igual importancia a todas las variables (Muy alta y muy baja respectivamente). Además, también parecen darle mayor probabilidad de muerte a los personajes que aparecieron en la T2. Revisando, en la T2 realmente no muere ningún personaje importante y, por el contrario, se introducen varios personajes que van a morir en la “Boda Roja” (T3).
  • Regresión Logística (libros): Le da importancia distinta a todas las variables, no se centra en ninguna temporada en particular. Las variables más importantes son pertenecer a las casas: Bolton, Baratheon, Stark y Targaryen… lo cuál tienes sentido. Con este modelo, se hará la predicción

Predictions are Comming…

El modelo elegido fue el de Regresión Logística basado en los personajes de los libros. El umbral de probabilidad para decir “muerto” o “vivo” de este modelo no es 50% debido al imbalance de clases en los personajes de los libros/show. El umbral de este modelo se ubica, en cambio, cerca al 81%. (Es decir, un personaje con predicción de muerte menor a 81% es muy probable que viva)

Abajo una imagen con los personajes conocidos del show en orden de probabilidad de muerte…


Última oportunidad…


Esto puede ser un spoiler…


No digan que no se advirtió…


Probabilidad de muerte de algunos personajes basado en el modelo desarrollado

No, a mí tampoco me gusta el resultado del modelo, pero estos son algunos motivos por los que creo que está prediciendo de esta manera y que hay que tener en cuenta:

  • El modelo no tiene en cuenta tiempo, el orden en la imágen es la probabilidad de morir DURANTE la T8, no significa que es en ese orden que morirán.
  • En las últimas temporadas, Tyrion Lannister, uno de mis personajes favoritos, paso su lealtad a Daenerys Targaryen (Una casa con alta importancia en el modelo), así mismo, creo que su popularidad ha bajado pues antes era más astuto.
  • En la última temporada se supo que Jon Snow realmente se llama Aegon Targaryen, lo cual también cambia su casa-familia y puede subir su probabilidad de muerte.
  • En la imagen no se ven todos los personajes, simplemente los de más alta probabilidad de muerte (>34%). Si el personaje que buscas no está en la imagen, es porque tiene una probabilidad más baja y vivira!
  • De acuerdo al modelo, los personajes que tienen sangre real, que pueden aspirar al Trono de Hierro y que tienen menos probabilidad de muerte son: Bran (Aunque parece que ya la posición no le llama la atención), Gendry (Realmente es Baratheon), ví en Internet inclusive una teoría que favorece a HotPie, o… Cersei Lannister.

Por esto mismo también mi modelo no me gusta pero “son los datos y hay que darlos”. Realmente espero equivocarme.

Actualización [28–04–2019]: Estado del modelo después del episodio 3. El promedio de acierto de muertes ocurridas hasta el momento es de 75%.

Actualización [05–05–2019]: Estado del modelo después del episodio 4. El promedio de acierto de muertes ocurridas hasta el momento es de 77%.

Actualización [12–05–2019]: Estado del modelo después del episodio 5, el episodio con mayor cantidad de personajes conocidos fallecidos hasta el momento: El promedio de acierto de muertes ocurridas hasta el momento es de 73%.

Nota: El modelo asumió, para su entrenamiento, que Ellaria Sand, capturada y encerrada en la prisión de King’s Landing estaba viva, y predijo su muerte con un 52% de probabilidad (Es decir, vivía al final de la temporada), pero aquí estoy asumiendo que murió en el derrumbe del castillo aunque no lo mostraron explícitamente en el capítulo.

Actualización [19–05–2019]: Estado del modelo después del episodio 6, el último episodio de la temporada: El promedio de acierto de muertes ocurridas es de 74%.

Pero como ya se acabó del todo la serie, ahora sí podemos calcular las métricas del modelo, para evaluar que tan buenas fueron sus predicciones de personajes vivos/muertos al final de la temporada. (Esa era la variable objetivo: muere/no muere al final, sin tener en cuenta tiempo/orden)

Estado de las predicciones del modelo al final de la temporada 8

Abajo se puede apreciar la matriz de confusión del modelo: El modelo fue muy exacto (Accuracy: 99.38%) gracias a la cantidad de personajes vivos que acertó… Esto no es un gran descubrimiento, debido a la gran cantidad de personajes vivos en el set de datos: más de 1900!

La precisión para acertar la muerte de los personajes (64%) fue buena, teniendo en cuenta que el modelo predijo la muerte de casi todos los personajes principales y pues, alguno debía quedar vivo para el final de la serie. El recall del modelo sobre personajes fallecidos (56%), indica que algunas de las muertes reales fueron inesperadas, hasta para el modelo!

What do we say to the god of Unbeatable Models?…. Not Today

Este no es el final de la historia. Obviamente este modelo puede ser mejorado, para empezar:

  • Fue entrenado con un set muy desbalanceado: solo 65 registros marcados como target=1 (fallecido) incluyendo a Edmure Tully… y si vieron el episodio con atención, estaba vivo! Esa puede ser una de las razones por las que el modelo tuvo un poco más de Falsos Positivos de los esperados: fue entrenado para predecir la muerte con las características de un personaje que realmente estaba vivo. Y con ese desbalance de clases, 1/65 puede afectar muchísimo!
  • Aparecieron nuevos personajes en este episodio, en el consejo de representantes de las casas más poderosas: cinco personajes para ser exactos, incluyendo el nuevo príncipe de Dorne. No los conocíamos, pero haber sabido sus nombres y sus características antes, durante el entrenamiento hubiera ayudado al modelo a evitar también algunos Falsos Negativos.
  • El modelo podría tener en cuenta tiempo para predecir el orden de las muertes. es algo que siempre quise hacer y me parece una idea muy interesante para seguir trabajando, tal vez con los libros que están por salir?

King Bran, the Predicted One

Es en serio! Si miramos las predicciones del modelo desde un principio, Bran tiene un 71% de probabilidad de muerte, que es mucho menor al 81% que tomamos como umbral. De los personajes que el modelo predijo como vivos al final de la serie (<81%), el es el primero en aparecer con sangre real en las predicciones más bajas.

Personalmente, no creía que fuera posible, pues él dijo muchas veces que no quería esa posición, así que para mí las otras opciones posibles eran Gendry y Cersei y dije que por eso no me gustaba mi modelo (Así que ya ven, los Científicos de Datos también se equivocan interpretando sus propios modelos, y analizarlos te ayuda a descubrir cosas que ni siquiera tú sabías!)

Cambio de opinión: Me encantó este modelo, me encantó la serie y me encanta la Ciencia de Datos!

Si quieres ver este análisis completo, datos y código, puedes visitar mi Github