Xarxes neuronals per a predir l’ocupació en busos

Xarxes neuronals per a predir l’ocupació en busos

L’inLab FIB està col·laborant actualment en un projecte anomenat Intelibus, conjuntament amb l’empresa de mobilitat Autocorb i la companyia TIC de desenvolupament software Geoactio, per a desenvolupar un sistema de predicció de l’ocupació de passatgers als busos.

 
L’inLab FIB està col·laborant actualment en un projecte anomenat Intelibus, conjuntament amb l’empresa de mobilitat Autocorb i la companyia TIC de desenvolupament software Geoactio, per a desenvolupar un sistema de predicció de l’ocupació de passatgers als busos. A causa de la pandèmia de la covid-19, s’ha accelerat la implementació d’aquesta funcionalitat, ja que pot ajudar a frenar els contagis i evitar aglomeracions: si s’informa a la gent de com aniran de plens els busos amb antelació, els usuaris podran optar per viatjar en autobusos que vagin més buides. En aquest article del blog expliquem quins mètodes i algorismes de predicció utilitzem i aprofitarem per entrar una mica en detall en models de machine learning com ara les xarxes neuronals.
 
En el camp de la intel·ligència artificial hi ha moltes maneres d’abordar un problema de predicció com aquest: mitjançant simulació, estimant la demanda, implementant heurístiques, utilitzant machine learning/deep learning, etc. Donat que les empreses d’autobusos solen guardar dades i històrics dels viatges de cada bus, s’obre la possibilitat d’abordar el problema amb aprenentatge supervisat (supervised learning), és a dir, entrenar models amb dades etiquetades amb el que volem predir. En el projecte d’Intelibus disposem de dades provinents de càmeres 3D de l’interior dels autobusos que compten les persones que pugen i baixen a cada parada. Si ajuntem aquestes dades amb informació de les diferents línies de busos, informació de calendari i històrics de validacions dels passatgers, ja tindríem les dades necessàries per a ser capaços d’entrenar xarxes neuronals que prediguin d’ocupació a cada parada.
 

Què és entrenar un model?

Quan parlem d’entrenar una xarxa neuronal, el que volem en realitat és ajustar els paràmetres d’una funció (xarxa neuronal) perquè aprengui una tasca concreta; que aprengui a mapejar  uns inputs a uns outputs. Això s’aconsegueix utilitzant grans quantitats dades per a anar minimitzant l’error de predicció del model respecte a aquestes. Si us sona la “regla de la cadena” que us van ensenyar per a derivar i pensàveu que mai més sentiríeu a parlar d’ella, doncs bé, el procés d’entrenament d’una xarxa neuronal es basa principalment en l’enginyosa aplicació d’aquesta regla, la qual ens permet calcular com s’han d’anar modificant els paràmetres de la xarxa per a minimitzar l’error de predicció iterativament. 


En el nostre cas, volem que el model aprengui a calcular l’ocupació dels busos a cada una de les parades per on passen. De manera que al model li hem de donar com a input una representació numèrica (vectors) de la informació del bus, la parada, el calendari, etc. i volem que ens retorni el nombre de passatgers que hi haurà, tal com es mostra a la següent imatge. Amb històrics d’uns mesos anteriors ja podem arribar a obtenir una precisió prou bona de predicció.

 

La gràcia d’utilitzar xarxes neuronals és que ens permeten, amb un únic model, poder predir sobre qualsevol de les línies de bus a cada una de les parades, sense haver de fer un model o algorisme especialitzat per a cada una de les línies. Això simplifica la complexitat d’implementació a l’hora de portar-ho a producció i permet també aplicar-ho en altres ciutats fàcilment, on les línies i les parades seran completament diferents.

Series temporals: Xarxes neuronals recurrents

Tot i això, ho podem arribar a fer millor. El model que acabem de presentar no té en compte l’ocupació prèvia de les parades anteriors, la qual és una informació molt rellevant, i saber-la pot condicionar molt l’ocupació de la pròxima parada. Per a aquests tipus de problemes on es tracten seqüències hi ha un tipus de xarxes neuronals anomenades xarxes recurrents (Recurrent Neural Networks), que ens permeten treballar amb sèries temporals tenint en compte els valors anteriors d’ocupació per a predir-ne la de la següent parada. Per a fer-se una idea de com són, la següent imatge mostra un esquema simplificat de com és el flux d’informació dels inputs fins als outputs. El que fan, en resum, és anar codificant la informació de les parades prèvies de forma compacta per a, finalment, obtenir un vector (ht) que conté tota la informació comprimida de la seqüència a partir del qual podem predir el valor d’ocupació següent. Així doncs, amb aquesta arquitectura de xarxa neuronal obtenim millors resultats, ja que el model pot arribar a captar els canvis i patrons en l’ocupació de passatgers al llarg del temps.

I com és la predicció? A la següent imatge podem veure un exemple del que el model prediu per a un bus en concret: a l’eix de les x tenim l’eix temporal i l’eix i representa l’ocupació del bus. Podem veure com l’ocupació comença a 0 a l’inici del viatge, va pujant i torna a baixar a 0 quan finalitza el servei, i així successivament (com podem veure a les “muntanyetes” que es formen al gràfic). La línia blava fa referència a l’ocupació real que obtenim de dades històriques i la línia taronja representa el que ha après la xarxa neuronal (i, en concret, els punts liles són prediccions totalment noves sobre viatges que no s’han utilitzat durant l’entrenament).
 

En conclusió, veiem que aquests models basats en xarxes neuronals són molt versàtils, i permeten resoldre una gran diversitat de problemes de manera molt eficaç i acurada si disposem de les dades necessàries.
 

Referències

Predicció d’ocupacions a l’autobús (https://www.autocorb.com/prediccio-ocupacions-bus/)

Neural Networks and Deep Learning (http://neuralnetworksanddeeplearning.com/)

Understanding Neural Networks (https://towardsdatascience.com/understanding-neural-networks-19020b758230)

Hochreiter, Sepp & Schmidhuber, Jürgen. (1997). Long Short-term Memory. Neural computation. 9. 1735-80. 10.1162/neco.1997.9.8.1735.