Aprendiendo Machine Learning con el Mundial

Nombre alternativo de la charla: Antonio

Juan Pedro Fisanotti

Objetivo de la charla:

  • Aprender algunas nociones básicas de Machine Learning
  • Reforzar esos conocimientos con un ejemplo real

Machine Learning

Qué es?

  • Rama de la inteligencia artificial
  • Programas que "aprenden desde los datos"
  • Cercana a la estadística y métodos matemáticos

Aprendizaje no supervisado

Idea principal: reconocer patrones o agrupaciones en los datos.

No interpreta los grupos, eso nos toca a nosotros.

Aprendizaje supervisado

Idea principal: encontrar una función que explique los datos de salida a partir de los datos de entrada.

Nosotros tenemos ambos grupos de datos.

Aprendizaje supervisado - Regresión

Una función corriente y moliente.

Aprendizaje supervisado - Clasificación

Una función que devuelva etiquetas.

Algunas nociones importantes de aprendizaje supervisado

Idea de hipótesis

Es una función candidata a ser la que buscamos para predecir las salidas.

Los algoritmos van a probar muchas hipótesis, y devolvernos la mejor que encuentren.

Idea de modelo

Es el tipo de función, el molde, que vamos a utilizar para armar nuestras hipótesis.

Por lo general, un algoritmo específico de IA sabe trabajar con un tipo específico de funciones, o grupo de tipos similares.

Entrenamiento y predicción

  • Primero entrenamos para encontrar una buena hipótesis
  • Luego podemos predecir nuevos casos usando la hipótesis encontrada

Modelos paramétricos y no paramétricos

Hablando mal y pronto:

  • Modelo paramétrico: arma una f() con algunos parámetros, y eso solo basta para hacer predicciones.

  • Modelo no paramétrico: tiene una f() que consulta los datos. Para predecir hace falta la f() más los datos.

Sobreentrenamiento

Algunos algoritmos de aprendizaje supervisado

(ejemplos, hay muchos)

K-Vecinos

  • Es no paramétrico. Necesita los datos siempre.
  • Es muy simple, no tiene tiempo de entrenamiento.

Redes neuronales

  • Es paramétrico, aprende una función y con eso puede predecir, sin llevarse los datos.
  • Hay que entrenarlas, y es un proceso pesado y lento.
  • Pueden aprender funciones super complejas (técnicamente, cualquier función)

El Mundial

  • Gente que patea una pelota.
  • Aparentemente, meter la pelota en el arco del otro equipo, es bueno. No se sabe bien por qué.
  • Cada tanto hay una competencia para ver qué país tiene los mejores peloteadores.

El problema

Cometí el error de hablar demasiado en un almuerzo con la familia de mi novia (me suele pasar).

  • Prode familiar!!
  • Participación obligatoria
  • El perdedor cocina para todos
  • Se tanto de cocina como de fútbol

La solución

  • Armar un clasificador
  • Entradas: partidos
  • Salidas: quiénes ganan los partidos

Paso 1: obtener datos

  • Suele renegarse. Renegué (lugar, formato, completitud, etc).
  • Mejor fuente: Wikipedia
  • Formato: html, no muy estandarizado --> scrapeo + copy/paste --> csv

Paso 2: pre-procesar los datos

  • "Numerizar" nombres de equipos --> estadísticas
  • Normalizar valores
  • Contrarrestar bias de orden de equipo
  • Foco en lo que pueda predecir mejor. Ganados vs empatados.

Paso 3: los datos son clasificables?

  • No se pueden graficar todas las dimensiones
  • Confirmadas algunas intuiciones obvias

Paso 4: elegir algoritmo

  • K-vecinos?
  • Redes neuronales?

Paso 5: entrenamiento

  • Back propagation
  • Evitar sobreentrenamiento

Paso 6: predecir!

  • No olvidar re-pre-procesar, normalizar, etc.
  • Ida y vuelta
  • Todos contra todos
  • Re-entrenamiento entre etapas

Ya que estamos, competir online en El Ega.

El resultado

Prode familiar:

Primer puesto!!

El Ega (+200 personas):

Primer puesto!!!!!!!

Conclusiones

Machine Learning es algo que puede fácilmente aplicarse a problemas reales y no tan grandes, con resultados suficientemente buenos (mejores que un humano) para el problema.

Hay que perderle el miedo.

?

Links útiles

El código del predictor del mundial visualizado con ejemplos de datos y gráficos:

http://nbviewer.ipython.org/github/fisadev/world_cup_learning/blob/master/learn.ipynb

El código fuente de eso mismo en github:

https://github.com/fisadev/world_cup_learning