Arbol de decisiones
Algoritmo -Boosted Decision Tree-
Sumario
El experimento utiliza los datos de Juan Ignacio Bagnato sobre como predecir si una nueva canción podria llegar al top del Billboard.
Descripción
He tomado del sitio aprendemachinelearning.com de Juan Ignacio Bagnato, el experimento para la Predicción del “Billboard 100”: ¿Qué artista llegará al número uno del ranking? y aunque el experimento originalmente estaba diseñado para funcionar sobre la plataforma Jupyter y phyton , lo he adaptado para ser usado con el motor de Machine Learning de AZURE, creo que con buen éxito.
Como se diseña el experimento
A partir de atributos de cantantes y de un histórico de canciones que alcanzaron entrar al Billboard 100 (U.S.) en 2013 y 2014, se crea unmodelo de machine learning utilizando arbol de decisión que permitiría «predecir» si una nueva canción podría llegar a número uno.
Obtención de los datos de entrada
Se recolectan los datos usando código python y hace webscraping de una web pública “Ultimate Music Database” con información histórica del Billboard y ademas obtiene de este artículo: “Analyzing billboard 100″. Luego completé atributos utilizando la API de Deezer (duración de las canciones), la API de Gracenote (género y ritmo de las canciones). Finalmente el autor agregó «a mano» varias fechas de nacimiento de artistas utilizando la Wikipedia que no había conseguido con la Ultimate Music Database. Algunos artistas quedaron sin completar su fecha de nacimiento y con valor 0. Luego utiliza una técnica estadística válida para reemplazar las edades faltantes, tomando en cuenta el promedio y las desviaciones de las edades de los otros cantantes
Datos utilizados
Entre los datos usados destaca: Titulo de la canción, artista, “mood” ó estado de ánimo de esa canción, tempo, género, Tipo de artista, fecha en que apareció en el billboard (por ejemplo 20140628 equivale al 28 de junio de 2014), la columna TOP es la etiqueta, en la que aparece 1 si llegó al número uno de Billboard ó 0 si no lo alcanzó y el año de Nacimiento del artista. Vemos que muchas de las columnas contienen información categórica. La columna durationSeg contiene la duración en segundos de la canción, siendo un valor contínuo pero se pasó a dato tipo categórico .
Balanceo de Datos: Pocos artistas llegan al número uno
Para mantener un “equilibrio” en la cantidad de etiquetas «top» y “no-top” de las canciones, debido a que en el transcurso de un año, apenas unas 5 o 6 canciones logran el primer puesto y se mantienen durante varias semanas en ese puesto. Aunque el estudio original solamente utilizó canciones del 2014 y 2015, se topa con el problema de que apenas tenía 11 canciones llegaron al top de Billboard y 494 no llegaron.
Para intentar equilibrar los casos positivos se agregaron los «top» de los años 2004 al 2013. Con eso se consiguió llegar a 494 “no-top” y 141 top.
A pesar de esto sigue estando desbalanceado, y se podría seguir agregando sólo canciones TOP de años previos, Juan Ignacio decide utilizar un parámetro del algoritmo de árbol de decisión para compensar esta diferencia.
Mapeo de Datos
Al final se transformaron TODOS los datos de entrada a valores categóricos. Las edades, las separamos en: menor de 21 años, entre 21 y 26, etc. las duraciones de canciones también, por ej. entre 150 y 180 segundos, etc. Para los estados de ánimo (mood) se agruparon las similares.
El Tempo que puede ser lento, medio o rápido queda mapeado:
0-Rapido, 1-Lento, 2-Medio (por cantidad de canciones en cada tempo: el Medio es el que más tiene).
Finalmente se obtuvo un conjunto final de datos como arboldecision_limpio.csv, que es el que se utiliza la plataforma ML de AZURE y que es el que tiene los atributos definitivos para crear nuestro árbol.
La adaptación que yo he realizado del modelo original de Jupyter / Phyton a la plataforma Azure ML
Utiliza únicamente el modulo de entrenamiento (train) , el de validación ( score) y el algoritno Boost decision tree, y luego . a través de un webservice, que puede funcionar por «batch» o caso por caso en el modo «test» permite predecir nuevos casos.
Esta transformación de una plataforma a otra no fue una labor compleja ya que el sitio de J.I. Bagnato favorece esta labor por su esmerado enfoque didáctico y de una técnica que permite paso a paso entender detalladamente el proceso e irlo transformándo a la nueva plataforma.
Predicción de Canciones al Billboard 100
Para concluir, se utiliza el algoritmo para predecir dos nuevos casos de artistas que entraron al billboard 100 en 2017:
a.) Camila Cabello que llegó al numero 1 con la Canción Havana y
b.) Imagine Dragons con su canción Believer que alcanzó un puesto 42 pero no llegó a la cima.
Comparando resultados
Usando ahora el modelo creado con Azure Machine Learning y el Webservice en modo test utilizamos estos datos:
1,5,2,4,1,0,3 para la canción Havana. Obtenemos una probabilidad de llegar al primer lugar del 96.65 % lo cual coincide además con la realidad.
En el segundo caso, utilizamos la canción Believer y utilizamos los datos (0,4,2,1,3,2,3) obteniendo una probabilidad menor al 0,5 %
Asi pues, nuestro árbol, una vez entrenado al igual que el modelo Phyton/Jupyter reproduce bastante bien los resultados que en la realidad se obtuvieron. A pesar de que podria ser necesario afinar algunos otros parámetros
Pueden consultar el experimento original en Python / Jupyter en el sitio : http://www.aprendemachinelearning.com/arbol-de-decision-en-python-clasificacion-y-prediccion/
Se agradece al autor el aporte de los datos, la metodología y el procedimiento de su BLOG para la realización de este experimento.