Skip to content

Instantly share code, notes, and snippets.

@CrossNox
Last active October 6, 2018 00:13
Show Gist options
  • Save CrossNox/3d8dd359fe5c717a825111a9d15aed1a to your computer and use it in GitHub Desktop.
Save CrossNox/3d8dd359fe5c717a825111a9d15aed1a to your computer and use it in GitHub Desktop.
PyData 2018 - Córdoba, Argentina

Self-Driving Cars and AI: Transforming our Cities and our lives

Nemanja Djuric

UBER ATG

  • Machine learning lead autonomous driving

Why AI?

  • 2016 was the deadliest year for driving
  • On average, 9% increase from 2010 to 2016

Even though vehicle safety continues to improve, it might not be enough: 94% of crashes could be linked back to the driver. So it seems appropiate to remove the human factor from the scene and use tech to diminish risk factors.

There are lots of moving parts when modelling traffic. Hence the difficulty of doing it in a classic way.

Supervised Learning: traffic images labeled (by their own team) Lesson learned: successful learning comes from lots of data + lots of cycles + careful learning

What makes a successful model? Given their bussiness case:

  • accuracy
  • fast to iterate and fix
  • deployability
  • time to recognize

This last item is quite important: the model must be "real time"

They need a detailed mapping of new roads

Localization

All signals used to localize itself on its surroundings -> accuracy is within 2cm generally

Perception

  • What is going on around the car?
  • What are the moving actors on the scene?
    • their speed
    • acceleration
    • etc Speed vectors of several moving actors on the scene could be seen on the footage

Prediction

How will the system evolve?

Input destination -> routing -> motion planning -> vehicle control

Imitation learning

  • 20hs of human driving footage
  • human actions as input signal
  • data augmentation
    • provide scenes not in the footage
    • create variations on the footage
  • nn & exec (tensorflow, caffe, etc)

Road testing

Safety driver + copilot The slightest force to activators disables the system for the safety driver to take over control

Performance analysis

  • Thousands of hours of simulation
  • User feedback!
    • Most peole are excited
    • They want to learn more

Back to the why

  • Average of 293 hs/year driving
  • $960 p/year in traffic delays spent per person
  • 1bn vehicles
    • 96% sit idle
    • parking space required

Fantastic recommendations and where to find them

https://slides.com/jbayardo/pydata-cordoba-2018/fullscreen#/

HPC

http://cor.to/pydatahpc Cientificos formados que desarrollan computo de alto desempeño desde hace varios años en fortran77 por ejemplo. Hay una camada de fisicos, quimicos, biologos mas jovenes que tienen la filosofia mas de python.

Lo que termina pasando es que colisionan estas dos filosofias. A los desarrolladores de hpc lo que les importa es aprovechar toda la capacidad de computo de las pcs y tener el resultado rapido. Cada minima mejora sirve para una simulacion que tarda 3 semanas, por ejemplo. Python se queda corto en lo que es performance para hpc.

Python3.5+ Type hinting, quizas el duck typing termina generando un codebase un tanto inmantenible.

Escalar verticalmente para tener mejor performance alcanza en la mayoria de los casos. Pero cuando estas usando algo que no escala verticalmente? Se justifica cualquier mejora de performance. El esfuerzo, tiempo invertidos terminan mejorando el proceso, que no se justifica en la mayoria de los casos.

Numpy tiene una performance comparable con C, pero te limita a lo que esta implementado ahi. Tiene una serie de libraries historicas de algebra lineal accesibles desde python.

C y Fortran se pueden linkear, porque compilan a lenguaje de maquina. Tenemos que poder comunicar python con C!

  1. Escribir codigo en python
  2. Escribir la parte que consume tiempo en C
  3. Escribir una api C/Python

Esto es basicamente lo que hace numpy.

  • Contruir el modulo de python en C (onda cpython)
  • Ctypes: llamar a funciones de C definiendo los tipos en python
  • Cython (o Numba): autogenerar codigo de C desde Python (transpilador)
  • F2PY: para fortran, facil de usar, problemas de memoria
  • BOOST para C++, SWIG para muchisimos lenguajes

El primero tiene el problema de que es muy trabajoso, hay que usar la api de python en C.

Cython tiene el problema de que como autogenera codigo C, cuan rapido sea depende del transpilador y de que tan bien conozcas este nuevo lenguaje. Que hay que requerirle a cython para que haga las cosas bien. Ctypes parece el ganador.

CTypes tiene dos cosas:

  • expone los tipos de c
  • dynamic loader
>>> import ctypes as C
>>> math = C.CDLL('./libmymath.so')
>>> math.add_int(3,4)
7
>>> math.add_float(3,4)
0
>>> math.add_float(3.0,4.0)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    math.add_float(3.0,4.0)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: Don't know how to convert parameter 1

Un float de python no es un float de IEEE, sino un objeto que tiene un valor adentro. Entonces pincha!

>>> math.add_float(C.c_float(3.0),C.c_float(4.0))
2

El problema que teniamos con la entrada lo tenemos con la salida. No especificamos que lo que esperamos de la salida sea un punto flotante de C.

>>> math.add_float.restype = C.c_float
>>> math.add_float(C.c_float(3),C.c_float(4))
7.0

Es medio feo. Entonces asi como podemos espcificar el tipo de salida, podemos especificar los tipos de entrada:

>>> math.add_float.argtypes = [C.c_float, C.c_float]
>>> math.add_float(3,4)
7.0

Podemos pasar punteros a los valores asi:

>>> tres = C.c_int(3)
>>> cuatro = C.c_int(4)
>>> res = C.c_int()
>>> math.add_int_ref(C.byref(tres), C.byref(cuatro), C.byref(res))
0
>>> res.value
7

Esto se usa creando una funcion de python que use ctypes para que al usuario de mi library le sea transparente.

Como se hace el memory management? En general, debería hacerse desde python. Como allocar un array en python?

>>> import ctypes as C
>>> math = C.CDLL('./libmymath.so')
>>> in1 = (C.c_int * 3)(1, 2, -5)
>>> in2 = (C.c_int * 3)(-1, 3, -3)
>>> out = (C.c_int * 3)()
>>> math.add_int_array(C.byref(in1), C.byref(in2), C.byref(out), 3)
0
>>> out
<__main__.c_int_Array_3 object at 0x7faa65e0e400>
>>> out[0], out[1], out[2]
(0, 5, -8)

Se puede usar ctypes para devolver objetos de numpy.

En rectangle.c vemos un struct. Como puedo aprovecharlo como un objeto de Python? Es el salto final para conectarlos.

Tenemos la library geometry_minimal.py lista.

>>> import geometry_minimal
>>> r = geometry_minimal.Rectangle()
>>> r.width = 10
>>> r.height = 30
>>> geometry_minimal.area(r)
300.0

Pero este enfoque no es OO puro. En geometry.py vemos algo mas parecido a algo que usariamos en Python.

>>> import geometry
>>> rectangle = geometry.Rectangle(10,30)
>>> rectangle.area()
300.0

Es mucho más limpio al usuario. Prestar atencion en geometry.py a lo siguiente:

    def area(self):
        return CLIB.area(self)

Cuando recibo self, lo que tengo es la posicion de memoria de la instancia. Entonces lo que hago es un wrapper para devolver el resultado de CLIB.area.

Podemos tener software para HPC que se vea como Python pero corra C en el fondo, para ser performante.

Quien da la charla cuenta que el usa Python, C, CUDA, assembly. Pero Python es lo que pega todo.

CPython te prohibe multithreaing (por el Global interpreter lock). Se puede bypassear como hace multiprocessing: spawnear varios interpretes. La library que se carga de C puede usar threading. Hay implementaciones de MPI para multithreading.

Otro ejemplo donde se libera el GIL es cuando se lee de disco.

Online payment fraud detection while you are hungry

Fabiano Fernandes, Data Scientist @ ifood

Chargebacks are less than 1% if the total, but when you have such a big scale, it sure looks like a lot of money. typically, e-commerce have a yearly "black friday" but for food delivery platforms, it might be about once a week. So, it's necessary to predict which transactions will be good and which ones will be a chargeback.

Lessons:

  • Infrastructure before models
  • Spark + mleap (https://github.com/combust/mleap)
  • Don't wait until the best model to put something in production
  • Make it easy to get data
  • Make sure that you can monitor your model in production

improving rain forecast

matias david lee aka Chun

Kilimo: le dice a los productores cuanto regar y cuando Usan datos. Al principio de la temporada se toma una muestra de suelo. Luego con imagenes satelitales y datos meteorologicos se calcula la evotraspiracion. Luego con una app el productor pone las precipitaciones y te dice cuando y cuanto regar.

Por que nos interesa la exactitud de los pronosticos de riego? Irrigar un campo es caro. Si va a llover, puedo ahorrarme ese gasto.

ETL for forecasts:

  • too many sources
  • too many formats
  • temporary data availability => tasks for collecting data

Un problema importante es como guardar los datos para nuevos experimentos y reproducibilidad. Lidiar con la perdida de datos.

TidyData: cada fila es la entrada de mi modelo.

Classification report de las 4 fuentes.

Machine learning for search

Cristian Martinez and Manish Saraswat

Query2Vec: learning to generate synonyms No parte de una ontologia. Doing it manually doesn't scale. Word2vec. Hypothesis: queries within a same session are related.

Learning to rank: Query2vec might even bring thousands of items. Which ones should go at the top? Models that sort items near and are fresh. A/B testing to find best linear combination. But it's hard to add factors and you can't model non-linear combinations.

Pointwise: ranking as calssification, regression or ordinal regression

Recommender Systems: A view from the trenches

Booking.com

Recommendation systems: Accommodations, Dates, Destinations, More

Un 20% de los 200+ modelos que se deplyaron en los ultimos 5 años son sistemas de recomendacion.

Sistemas de recomendacion + teoria de juegos

Lo principal es como se contrsuye un sistema de recomendacion.

  • Target item: Los recsys son complejos. que vamos a recomendar

  • Audience: A quien le estamos recomendando? Usuarios nuevos, usuarios expertos, usuarios de ultimo minuto?

  • Framing: Como enmarcamos las recomendaciones?

  • KPI: Que esperamos que sea genere el sistema de recomendacion? Mas click rate, mayor conversiones, upselling?

  • Data: Que data vamos a usar?

  • Feedback: como definimos la satisfaccion del cliente? Que es lo que nos dice que a un usuario le gusto lo que le recomendamos?

  • Sparsity: La mayoria de los usuarios viaja muy poco

  • Cold Start: en el caso de booking, es continuo

    • usuarios
    • hoteles
    • tipos de politicas de cancelacion
    • nuevos tipos de acomodacion
  • Latencia: ningun recomendador puede tardar mas de 10msecs

  • Availability: Llega un punto donde no puedo recomendar mas un hotel porque se quedo sin capacidad, a diferencia de un sistema que recomiende peliculas

  • Complejidad: los items se relacionan con otros

Lecciones aprendidas en los ultimos 5 años

Las metricas offline son un health check

No hay correlacion entre la metrica comercial y la metrica offline * selection bias: modeks are trained using a non random sample of the population of interes * para confirmar, el usuario tiene que ir, quedarse y puntuar * Feedback loops: our recommender system changes the system * Contraints: hotels run out of rooms * Non stationality: Suddenly everyone goes to russia

Latency is critical

UX Matters

Simplicity Bias

Tendencia a usar modelos simples: se ven mejoras mayores. Por que? Los modelos simples son mas robustos frente a esos problemas que rompen los sistemas productivos.

Ordernar los items es fundamental, pero hay mucho mas para hacer. No quedarse solo en la perspectiva de la academia de ordenar en base a una loss function arbitraria sino en alguna aplicacion de negocio. Desde las trincheras, el desarrollo tiene que ser incremental, hay que laburar con la gente de UX, etc

booking.ai Modelar disponibilidad es muy complicado!

Building an Empire: How To Use Data and Game Theory to Make Strategic Decisions

Eva Bojorges

Golden Balls. Prisioner's Dilemma. The inefficiency of paying the bill, 2014, Geenzy et al The tragedy of the commons.

An intuitive introduction to Deep Reinforcement Learning

https://docs.google.com/presentation/d/1B42Ad0QmGuH7HTdy2c1Tx81iJ9vB1ojr7biyeRrE7PE/mobilepresent?slide=id.g436fd4022e_0_351

spark-NLP

Library basadas en annotations: POS, Spellchecker, sentence detection, tokenizer, lemmatizer, NER, Stopword removal, etc

Spark-nlp motivation:

  1. Performance n Scale La mayoria de los fw servian en un solo nodo, por lo que el escalamiento era meramente vertical.
  2. Frictionless reuse Se puede usar todas las optimizaciones de spark, todo lo que estaba se puede usar
  3. Ebterprise grade

Applied ML from heterogenous data sources

Santiago Hernandez

RTB: Estas usando el celular -> app -> ad exchange -> bidders (jampp) -> bid -> eval Targeting | Engagement Datos transaccionales: distribucion cambia con la oferta y la demanda. Tiene mucha info del contexto. Datos organicos: surge cuando el user usa la app por su cuenta. Menos data, relacionada a al comportamiento, relacionada con la UX Data externa: formato no estandarizado, llega pordistintos medios, tiene una distribucion bastante estacionaria

3 Datas -> ML -> salida

5 estimadores, 500M+ data points per day Online learning -> distribuciones cambian muy rapido aparacen nuevas features, las viejas desaparecen los datasets son demasiado grandes hay que reacccionar rapdido

Ventana de espera: no se avisa si no ganaste Como los sistemas son todos automaticos y corren todo el tiempo es necesario tener un health check

SGD FTRL proximal logis reg hashing trick Strong lasso regularization

Python + C vs Sklearn + Vowpal Wabbit + Spark Mlib

Win rate? Cost? CTR? Install rate?

user segmentation

crear grupos de usuarios que nos interesen Predictive segments: grupos de usuarios + rf -> prob de que cada usuario (?) Airflow

Lookalike: grupo d usuarios de interes, buscar gente parecida la idea es ante cold start generar nuevos features para otros modelos

En el modelo online se evita usar buscar toda la historia del yusaurio

Online estimator = contextual features offline = behavioural info

users have preferences = recsys

recevie user, calssifiy, search for clients intereseted, bid & such

The Road to Intelligence with Data Science

Favio Vazquez

  • Como la ciencia de datos permite crear inteligencia
  • Metodologia de trabajo
    • Algo de Heidegger
    • Agile is dead -> se tergisverso el manifiesto agil

Agile Business

  • The agile data science manifiesto
  • Business Science Problem Framework

Evaluar performance vs KPIs

QRs -.-

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment