Cómo apliqué ingeniería inversa a una empresa de $500M en sólo una semana usando IA: Mi historia completa

10/17/2017 | By Erwin Salas

This post originally appeared on blog.up.co


Nota Traducida de un post de Medium de Gianluca Mauro

Nota original: https://medium.com/startup-grind/i-reverse-engineered-a-500m-artificial-intelligence-company-in-one-week-heres-the-full-story-d067cef99e1c

Por qué lo hice:

Muchos de los documentos, conjuntos de datos y herramientas de software relacionados con el aprendizaje profundo han sido de código abierto. Esto ha tenido un efecto democratizador, permitiendo que individuos y pequeñas organizaciones construyan aplicaciones poderosas. WhatsApp fue capaz de construir un sistema de mensajería global que sirvió a los usuarios de 900 m con sólo 50 ingenieros, en comparación con los miles de ingenieros que fueron necesarios para las generaciones anteriores de los sistemas de mensajería.

Este "efecto WhatsApp" está sucediendo ahora en AI. Las herramientas de software como Theano y TensorFlow, combinadas con centros de datos de Cloud para capacitación y GPU de bajo costo para su despliegue, permiten a pequeños equipos de ingenieros construir sistemas AI de última generación.

Siempre termino la introducción de los seminarios de AI-Academy con una diapositiva que contiene esta cita de Chris Dixon y en el fondo una foto de George Hotz en su auto automotriz.

 

El mensaje es sencillo: hoy en día todos pueden aprovecharse de la inteligencia artificial sin gastar años y toneladas de dinero en i+d.

 

Creo firmemente que esto funciona tanto en caso de que desee empujar los límites de la tecnología (estilo de George Hotz), y en caso de que desee aplicar algunas metodologías de AI bien establecidas a los nuevos problemas.

 

Ya que algunas personas no estaban 100% convencidas por esto, decidí probarlo e invertir parte de mi tiempo para hacerlo realmente. Como mi profesor de negocios en la Universidad de Santa Clara solía decir: "tienes que probar la comida de tu perro".

 

Además, tengo que ser sincero que fue muy divertido:)

Encontrar el experimento adecuado:

Decidí elegir el caso de una empresa que realmente admiro (siendo Ingeniero de energía): Opower.

 

Lo que Opower hace es simple pero muy potente: utiliza datos de contadores inteligentes para ayudar a las empresas de servicios públicos a orientar a sus clientes proporcionándoles información sobre los patrones de consumo. Esto es muy importante para los servicios públicos, que necesitan mantener a sus clientes el consumo tan estable como sea posible durante el día (los llamados "picos" y "valles" son difíciles y caros de gestionar para un productor de energía por razones que no se cubren aquí).

 

Una vez que se conoce el patrón de consumo de un usuario de energía, es posible apuntarlo con una oferta personalizada para reducir su consumo durante momentos críticos.

 

Opower ha sido realmente exitoso en hacer esto: de acuerdo con CrunchBase, fue fundada en 2007, se hizo público en 2014, y finalmente adquirida por Oracle por $532 Cash, en 2016.

 

Opower hizo el caso perfecto desde que encontré este conjunto de datos muy fresco hecho de aproximadamente 15000 archivos CSV que contienen la carga horaria de 15000 edificios en los Estados Unidos, recogidos durante 2004. Parecía lo suficientemente cerca de lo que Opower realmente tienen disponible.

El caso era perfecto y yo estaba listo para ir;)

Buscando en los datos:

Lo primero que hice fue importar archivos CSV individuales y hacer algunas parcelas muy rápidas y sucias de los perfiles de consumo de energía para comprobar lo que podía recoger de ellos.

 

Hice algunas "parcelas bola": básicamente he trazado en un solo gráfico el perfil de consumo de energía de varios días con una línea negra fijada en 0,1 opacidad. Eso hace fácil ver los patrones de uso de energía más comunes en un edificio.

 

También hice tres parcelas separadas para todo el año, días laborables y fines de semana, para buscar diferentes patrones.

Aquí hay dos ejemplos:

"Hairball" parcela para un restaurante. De izquierda a derecha: todos los días del año incluidos, sólo laborables, sólo fines de semana y días festivos

"Hairball" parcela para una escuela secundaria. De izquierda a derecha: todos los días del año incluidos, sólo laborables, sólo fines de semana y días festivos.

 

Pueden parecer inútiles a primera vista, pero ya podemos extrapolar algunas ideas interesantes:

  • El restaurante funciona en el desayuno, el almuerzo y la cena (mira los tres picos)
  • El restaurante probablemente se abre entre las 5 am y las 6 AM (primer aumento en el consumo debido a los trabajadores que entran)
  • El restaurante probablemente cierra entre 1 AM y 2 AM
  • El restaurante trabaja los fines de semana y festivos.
  • La gente se queda en el restaurante más tiempo para almorzar que para la cena/desayuno.
  • El restaurante probablemente tiene algunas neveras que están en durante la noche (el consumo nunca es cero).
  • La escuela abre alrededor de las 6 de la mañana y cierra alrededor de las 10 PM.
  • ¿alrededor de las 6 pm la mayoría de la gente sale de la escuela, pero alguien se sigue hospedando (profesores? ¿actividades después de la escuela?)
  • ¿la escuela tiene algún tipo de aparato que nunca se apaga (frigoríficos?) ¿es eso? (¿o tal vez mantener las luces encendidas por la noche para la seguridad?)
  • ¡ hay un problema en el DataSet! Debemos esperar tener un consumo estable y cercano a cero los fines de semana (las líneas horizontales). ¿se ha cambiado el conjunto de datos? Resulta que sí lo es. Al mover todo 3 días en el pasado la situación se acerca a lo que esperamos, y la mayoría de los fines de semana y vacaciones presentan un consumo estable. :)
  • Una vez que supe lo que pude encontrar en estos datos, comencé el proceso de limpieza de datos y preparando algunas funciones para hacer mi modelo. Como siempre, esta era la parte más desperdiciadora de tiempo.

Tiempo de aprendizaje de la máquina:

Lo que necesitaba para empezar a encontrar patrones en el consumo de energía era un conjunto de datos con un "modelo" de cada edificio. Construí el modelo simplemente promediando el consumo de energía del edificio por hora para cada día del año (más algunas otras características que consideraba que pueden ser interesantes, como el estado, la ciudad, etc.).

 

Para hacer posible comparar edificios el uno con el otro I también dividió el consumo de cada hora por el consumo registrado más alto, de modo que se extiende entre 0 y 1 para cada edificio.

 

También construí mi función "make_building_model" para poder cambiar fácilmente el conjunto de datos y considerar sólo los días laborables o simplemente las vacaciones para crear el modelo de cada edificio, si quiero buscar patrones más específicos.

 

Decidí empezar por considerar todo el año, y ejecutar mi guión sobre todos los archivos de ~ 15000 CSV que tenía, terminando con un conjunto de datos de 15000 filas, y comenzó con la agrupación.

 

Utilicé un algoritmo KMeans muy simple (pero potente y eficiente), y lo alimenté con las muestras de 15000 usando como input Features una lista que contiene los 24 valores de consumo por hora escalados.

 

Jugué con el número de clústeres, y el que me permitió obtener los clústeres más significativos fue 6 (esto fue un enfoque de prueba y error, para brevedad voy a informar sólo el resultado final).

 

Para obtener algunas ideas he trazado los centros de cluster (básicamente los 6 principales patrones reconocidos por el algoritmo), junto con un bola de los edificios que forman parte de ese Cluster para que puedas apreciar las similitudes (Fíjate que hay miles de ¡ líneas con opacidad del 1% en esos gráficos! Ese es el efecto "fantasmal" que ves).

Se ve muy bien, ¿verdad? Básicamente ahora sabemos que:

 

  • Hay usuarios con un consumo cada vez mayor que los picos alrededor de las 4 PM y luego cae (Cluster 1)
  • Algunos usuarios tienen dos picos diarios, alrededor de 7 am y 9 pm (Cluster 2)
  • Algunos usuarios tienen tres picos diarios, alrededor de 8 am, 1 pm y 6 PM (Cluster 3)
  • Algunos usuarios tienen un tipo de operación de "dos modos": alto consumo de más o menos de 9 am a 5 pm, y bajo consumo en el resto (Cluster 4)
  • Algunos usuarios tienen un consumo similar al cluster 4, pero con un modesto (10% del consumo máximo) pero una caída brusca alrededor de la 1 pm (Cluster 5)
  • Algunos usuarios tienen un consumo bastante estable, con un consumo mínimo de 60% del pico (Cluster 6).

¿Podemos ir más lejos? ¿Qué tipo de valor podría una empresa salir de esto?

Esto es lo que conseguimos Si imprimimos la descripción de qué tipo de edificios pertenecen a cada uno de los clusters:

CLUSTER 1

total elements: 3042

n Stand-aloneRetailNew = 936 out of 936

n StripMallNew = 936 out of 936

n SecondarySchoolNew = 923 out of 936

n PrimarySchoolNew = 235 out of 936

n MediumOfficeNew = 4 out of 936

n LargeOfficeNew = 8 out of 936

CLUSTER 2

total elements: 2808

n LargeHotelNew = 936 out of 936

n MidriseApartmentNew = 936 out of 936

n SmallHotelNew = 936 out of 936

CLUSTER 3

total elements: 1872

n FullServiceRestaurantNew = 936 out of 936

n QuickServiceRestaurantNew = 936 out of 936

CLUSTER 4

total elements: 5381

n LargeOfficeNew = 928 out of 936

n MediumOfficeNew = 932 out of 936

n OutPatientNew = 935 out of 936

n PrimarySchoolNew = 701 out of 936

n SecondarySchoolNew = 13 out of 936

n SmallOfficeNew = 936 out of 936

n SuperMarketNew = 936 out of 936

CLUSTER 5

total elements: 936

n WarehouseNew = 936 out of 936

CLUSTER 6

total elements: 937

n HospitalNew = 936 out of 936

n OutPatientNew = 1 out of 936

¿Notas algo guay? Esto es lo que yo diría:

 

  • Todos los minoristas independientes, centros comerciales y casi todas las escuelas secundarias pertenecen al cluster 1. Si somos una empresa de servicios públicos que utiliza esta herramienta, al suscribir un nuevo contrato a este tipo de clientes que podríamos considerar para proponer incentivos para cambiar su consumo fuera de ese pico único.
  • Todos los hoteles y apartamentos "de subrise" pertenecen al cluster 2. Las empresas de servicios públicos pueden dirigirse a los clientes con ofertas que los empujan hacia la reducción del consumo alrededor de las 7 am y 9 pm (especialmente 9 pm). O por lo menos ser consciente de que si suscribir un nuevo cliente que es una gran cadena hotelera tienen que esperar esos picos.
  • Todos los restaurantes pertenecen al cluster 3. Posiblemente porque el DataSet no tenía ningún restaurante abierto sólo para dos de los tres platos (desayuno, almuerzo, cena). Los servicios públicos deben tener cuidado en particular con el último pico de los usuarios, que ocurre aproximadamente al mismo tiempo de los usuarios del clúster 2. Una promoción a medida podría incentivar, por ejemplo, un cambio en las horas de apertura y, por lo tanto, un cambio en el consumo (no estoy seguro de que tenga mucho sentido para los negocios, aunque).
  • El cluster 4 es el perfil más común, con oficinas de cualquier tamaño, supermercados y la mayoría de las escuelas primarias. Esperábamos que, ya que es un clásico tipo "9to5" perfil.
  • El cluster 5 es típico sólo de almacenes. La caída en el consumo alrededor de la 1 PM es probablemente un turno de turno. Podríamos incentivar el uso de la energía en las horas de la noche con promociones a medida, de modo que estos picos no suman los de los usuarios de Cluster 4.
  • Los nuevos hospitales tienen un perfil como el cluster 6. Esto justifica el consumo de alta noche y el perfil constante, ya que probablemente tienen máquinas que no se puede apagar por la noche. No hay mucho que podamos decir a un hospital para cambiar su comportamiento, y también son usuarios bastante constantes, así que los mantendremos callados:).

Conclusiones:

Sí, es posible sacar algunas conclusiones muy interesantes utilizando el aprendizaje de la máquina, incluso si no eres una empresa de $500 m, pero una sola persona con un poco de tiempo libre. Esto se debe principalmente a la disponibilidad de conjuntos de datos abiertos, así como al software de código abierto que me permitió construir un modelo duro pero de trabajo a una velocidad increíble.

 

También diría que el agrupamiento es una técnica extremadamente poderosa y fácil de aplicar que tiene mucho potencial sin explotar. Imagine lo que podría hacer en marketing con el mismo enfoque.

Desarrollos futuros:

Acabo de rascar la superficie de lo que es posible obtener de este conjunto de datos. Podríamos seguir observando las diferencias entre las diferentes áreas climáticas dentro de los Estados Unidos, las diferencias en los días laborables y los fines de semana, o hacer el mismo trabajo con otros tipos de consumo (el conjunto de datos original también tiene calefacción y otras cosas interesantes).

Si alguien quiere empezar a cavar, hice mi trabajo público en Github, donde puedes usar mis funciones para ahorrar mucho tiempo en la limpieza de datos, e inmediatamente empezar a hacer las cosas divertidas de ml:).

Nota Traducida de un post de Medium de Gianluca Mauro


×