Utilizzo di Machine Learning per prevedere il valore delle case su Airbnb

di Robert Chang

Splendida vista da una casa Airbnb a Imerovigli, Egeo, Grecia

introduzione

I prodotti dati sono sempre stati una parte fondamentale del servizio di Airbnb. Tuttavia, da tempo riconosciamo che realizzare prodotti dati è costoso. Ad esempio, il ranking di ricerca personalizzato consente agli ospiti di scoprire più facilmente case, mentre i prezzi intelligenti consentono agli host di impostare prezzi più competitivi in ​​base alla domanda e all'offerta. Tuttavia, ciascuno di questi progetti ha richiesto molto tempo e sforzi dedicati alla scienza e all'ingegneria dei dati.

Di recente, i progressi nell'infrastruttura di machine learning di Airbnb hanno ridotto significativamente i costi per implementare nuovi modelli di machine learning nella produzione. Ad esempio, il nostro team ML Infra ha creato un repository di funzionalità generali che consente agli utenti di sfruttare funzionalità di alta qualità, verificate e riutilizzabili nei loro modelli. I data scientist hanno iniziato a incorporare diversi strumenti AutoML nei loro flussi di lavoro per accelerare la selezione dei modelli e il benchmarking delle prestazioni. Inoltre, ML infra ha creato un nuovo framework che tradurrà automaticamente i notebook Jupyter in pipeline Airflow.

In questo post, descriverò come questi strumenti hanno lavorato insieme per accelerare il processo di modellazione e quindi ridurre i costi di sviluppo complessivi per un caso d'uso specifico della modellazione LTV, prevedendo il valore delle case su Airbnb.

Che cos'è LTV?

Il Customer Lifetime Value (LTV), un concetto popolare tra le aziende di e-commerce e marketplace, cattura il valore proiettato di un utente per un orizzonte temporale fisso, spesso misurato in termini di dollari.

Nelle aziende di e-commerce come Spotify o Netflix, LTV viene spesso utilizzato per prendere decisioni sui prezzi come impostare commissioni di abbonamento. Nelle società di mercato come Airbnb, la conoscenza delle LTV degli utenti ci consente di allocare il budget tra i diversi canali di marketing in modo più efficiente, calcolare prezzi di offerta più precisi per il marketing online basato su parole chiave e creare segmenti di inserzione migliori.

Sebbene sia possibile utilizzare i dati passati per calcolare il valore storico degli elenchi esistenti, abbiamo fatto un ulteriore passo in avanti per prevedere LTV di nuovi elenchi utilizzando l'apprendimento automatico.

Flusso di lavoro di apprendimento automatico per la modellazione LTV

I data scientist sono in genere abituati alle attività relative all'apprendimento automatico come ingegneria delle caratteristiche, prototipazione e selezione dei modelli. Tuttavia, portare un prototipo di modello in produzione richiede spesso un insieme ortogonale di abilità di ingegneria dei dati che i data scientist potrebbero non conoscere.

Fortunatamente, su Airbnb abbiamo strumenti di apprendimento automatico che astraggono il lavoro di ingegneria dietro la produzione di modelli ML. In effetti, non avremmo potuto mettere in produzione il nostro modello senza questi strumenti straordinari. Il resto di questo post è organizzato in quattro argomenti, insieme agli strumenti che abbiamo usato per affrontare ogni attività:

  • Ingegneria delle funzionalità: definire le funzionalità pertinenti
  • Prototipazione e formazione: addestra un prototipo di modello
  • Selezione e convalida del modello: esegue la selezione e l'ottimizzazione del modello
  • Produzione: porta in produzione il prototipo del modello selezionato

Ingegneria delle caratteristiche

Strumento utilizzato: repository di funzionalità interno di Airbnb - Zipline

Uno dei primi passi di qualsiasi progetto di apprendimento automatico supervisionato è la definizione di funzionalità pertinenti correlate alla variabile di risultato prescelta, un processo chiamato ingegneria delle funzionalità. Ad esempio, nel prevedere LTV, si potrebbe calcolare la percentuale delle successive 180 date del calendario in cui è disponibile una quotazione o il prezzo di una quotazione rispetto a quotazioni comparabili nello stesso mercato.

In Airbnb, l'ingegnerizzazione delle funzionalità spesso significa scrivere query Hive per creare funzionalità da zero. Tuttavia, questo lavoro è noioso e richiede tempo in quanto richiede conoscenze specifiche del dominio e logica aziendale, il che significa che le pipeline di funzionalità spesso non sono facilmente condivisibili o addirittura riutilizzabili. Per rendere questo lavoro più scalabile, abbiamo sviluppato Zipline - un repository di funzionalità di formazione che fornisce funzionalità a diversi livelli di granularità, come l'host, l'ospite, l'elenco o il livello di mercato.

La natura crowdsourcing di questo strumento interno consente ai data scientist di utilizzare una vasta gamma di funzioni di alta qualità e di controllo che altri hanno preparato per progetti passati. Se una funzione desiderata non è disponibile, un utente può creare la propria funzione con un file di configurazione della funzione come il seguente:

Quando sono necessarie più funzionalità per la costruzione di un set di allenamento, Zipline eseguirà automaticamente i join di chiavi intelligenti e riempirà il set di dati di allenamento dietro le quinte. Per elencare il modello LTV, abbiamo utilizzato le funzionalità Zipline esistenti e ne abbiamo aggiunto una manciata. In breve, nel nostro modello c'erano oltre 150 funzioni, tra cui:

  • Posizione: paese, mercato, quartiere e varie caratteristiche geografiche
  • Prezzo: tariffa per notte, spese di pulizia, prezzo rispetto ad elenchi simili
  • Disponibilità: notti totali disponibili,% delle notti bloccate manualmente
  • Prenotabilità: numero di prenotazioni o notti prenotate negli ultimi X giorni
  • Qualità: punteggi delle recensioni, numero di recensioni e servizi
Un set di dati di formazione di esempio

Con le nostre caratteristiche e la variabile di risultato definite, ora possiamo formare un modello per imparare dai nostri dati storici.

Prototipazione e formazione

Strumento utilizzato: libreria di apprendimento automatico in Python - scikit-learn

Come nell'esempio di dati di formazione di cui sopra, spesso è necessario eseguire un'elaborazione dei dati aggiuntiva prima di poter adattare un modello:

  • Imputazione dei dati: dobbiamo verificare se mancano dati e se tali dati mancano casualmente. In caso contrario, dobbiamo indagare sul perché e capire la causa principale. Se sì, dovremmo imputare i valori mancanti.
  • Codifica delle variabili categoriche: spesso non possiamo utilizzare le categorie non elaborate nel modello, poiché il modello non sa adattarsi alle stringhe. Quando il numero di categorie è basso, potremmo considerare l'utilizzo della codifica one-hot. Tuttavia, quando la cardinalità è elevata, potremmo considerare l'utilizzo della codifica ordinale, codifica in base al conteggio delle frequenze di ciascuna categoria.

In questo passaggio, non sappiamo bene quale sia il miglior set di funzionalità da utilizzare, quindi è essenziale scrivere codice che ci permetta di iterare rapidamente. Il costrutto della pipeline, comunemente disponibile in strumenti open source come Scikit-Learn e Spark, è uno strumento molto conveniente per la prototipazione. Le pipeline consentono ai data scientist di specificare progetti di alto livello che descrivono come trasformare le funzionalità e quali modelli addestrare. Per renderlo più concreto, di seguito è riportato uno snippet di codice della nostra pipeline del modello LTV:

Ad un livello elevato, utilizziamo pipeline per specificare trasformazioni di dati per diversi tipi di funzionalità, a seconda che tali funzionalità siano di tipo binario, categorico o numerico. FeatureUnion alla fine combina semplicemente le funzionalità per colonna per creare il set di dati di addestramento finale.

Il vantaggio di scrivere prototipi con pipeline è che estrae noiose trasformazioni di dati usando trasformazioni di dati. Collettivamente, queste trasformazioni assicurano che i dati vengano trasformati in modo coerente attraverso l'addestramento e il punteggio, il che risolve un problema comune di incoerenza nella trasformazione dei dati quando si traduce un prototipo in produzione.

Inoltre, le tubazioni separano anche le trasformazioni di dati dall'adattamento del modello. Sebbene non mostrato nel codice sopra, i data scientist possono aggiungere un passaggio finale per specificare uno stimatore per l'adattamento del modello. Esplorando diversi stimatori, i data scientist possono eseguire la selezione del modello per scegliere il modello migliore per migliorare l'errore fuori campione del modello.

Esecuzione della selezione del modello

Strumento utilizzato: vari framework AutoML

Come menzionato nella sezione precedente, dobbiamo decidere quale modello candidato è il migliore da mettere in produzione. Per prendere una decisione del genere, dobbiamo ponderare i compromessi tra l'interpretazione e la complessità del modello. Ad esempio, un modello lineare sparsa potrebbe essere molto interpretabile ma non abbastanza complesso da generalizzare bene. Un modello basato su un albero potrebbe essere abbastanza flessibile da acquisire modelli non lineari ma non molto interpretabile. Questo è noto come il compromesso Bias-Variance.

Figura a cui si fa riferimento da Introduzione all'apprendimento statistico con R di James, Witten, Hastie e Tibshirani

In applicazioni come l'assicurazione o lo screening del credito, un modello deve essere interpretabile perché è importante che il modello eviti di discriminare inavvertitamente determinati clienti. In applicazioni come la classificazione delle immagini, tuttavia, è molto più importante avere un classificatore performante rispetto a un modello interpretabile.

Dato che la selezione del modello può richiedere molto tempo, abbiamo sperimentato l'utilizzo di vari strumenti AutoML per accelerare il processo. Esplorando un'ampia varietà di modelli, abbiamo scoperto quali tipi di modelli tendevano a dare le migliori prestazioni. Ad esempio, abbiamo appreso che gli alberi potenziati con gradiente eXtreme (XGBoost) hanno notevolmente superato i modelli di benchmark come i modelli di risposta media, i modelli di regressione della cresta e gli alberi delle singole decisioni.

Il confronto di RMSE ci consente di eseguire la selezione del modello

Dato che il nostro obiettivo primario era predire i valori delle liste, ci siamo sentiti a nostro agio nel produrre il nostro modello finale usando XGBoost, che favorisce la flessibilità rispetto all'interpretazione.

Portare i prototipi di modello in produzione

Strumento utilizzato: framework di traduzione per notebook di Airbnb - ML Automator

Come accennato in precedenza, la costruzione di una pipeline di produzione è molto diversa dalla creazione di un prototipo su un laptop locale. Ad esempio, come possiamo svolgere periodicamente la riqualificazione? Come possiamo ottenere un gran numero di esempi in modo efficiente? Come costruiamo una pipeline per monitorare le prestazioni del modello nel tempo?

In Airbnb, abbiamo creato un framework chiamato ML Automator che traduce automagicamente un notebook Jupyter in una pipeline di machine learning Airflow. Questo framework è progettato specificamente per i data scientist che hanno già familiarità con la scrittura di prototipi in Python e desiderano portare il loro modello in produzione con una limitata esperienza nell'ingegneria dei dati.

Una panoramica semplificata di ML Automator Framework (credito fotografico: Aaron Keys)
  • Innanzitutto, il framework richiede all'utente di specificare una configurazione del modello nel notebook. Lo scopo di questa configurazione del modello è di dire al framework dove individuare la tabella di allenamento, quante risorse di calcolo assegnare per l'allenamento e come verranno calcolati i punteggi.
  • Inoltre, i data scientist sono tenuti a scrivere specifiche funzioni di adattamento e trasformazione. La funzione di adattamento specifica come verrà eseguito esattamente l'allenamento e la funzione di trasformazione verrà racchiusa come UDF Python per il punteggio distribuito (se necessario).

Ecco uno snippet di codice che dimostra come sono definite le funzioni di adattamento e trasformazione nel nostro modello LTV. La funzione di adattamento indica al framework che verrà addestrato un modello XGBoost e che le trasformazioni dei dati verranno eseguite in base alla pipeline definita in precedenza.

Una volta unito il notebook, ML Automator avvolgerà il modello addestrato all'interno di un UDF Python e creerà una pipeline Airflow come quella qui sotto. Le attività di ingegneria dei dati come la serializzazione dei dati, la pianificazione della riqualificazione periodica e il punteggio distribuito sono tutti incapsulati come parte di questo lavoro batch giornaliero. Di conseguenza, questo framework riduce significativamente il costo dello sviluppo del modello per i data scientist, come se ci fosse un ingegnere dedicato dei dati che lavorasse a fianco dei data scientist per portare il modello in produzione!

Una vista grafica del nostro DAG LTV Airflow, in esecuzione in produzione

Nota: oltre alla produzione, ci sono altri argomenti, come il monitoraggio delle prestazioni del modello nel tempo o l'utilizzo dell'ambiente di calcolo elastico per la modellazione, che non tratteremo in questo post. State tranquilli, queste sono tutte aree attive in fase di sviluppo.

Lezioni apprese e guardare avanti

Negli ultimi mesi, i data scientist hanno stretto una stretta collaborazione con ML Infra e da questa collaborazione sono nati molti grandi modelli e idee. In effetti, crediamo che questi strumenti sbloccheranno un nuovo paradigma su come sviluppare modelli di apprendimento automatico su Airbnb.

  • Innanzitutto, il costo dello sviluppo del modello è significativamente più basso: combinando i punti di forza disparati dei singoli strumenti: Zipline per la progettazione delle caratteristiche, Pipeline per la prototipazione dei modelli, AutoML per la selezione e il benchmarking dei modelli e infine ML Automator per la produzione, abbiamo abbreviato notevolmente il ciclo di sviluppo .
  • In secondo luogo, il design basato su notebook riduce la barriera all'ingresso: i data scientist che non hanno familiarità con il framework hanno accesso immediato a una pletora di esempi di vita reale. I notebook utilizzati nella produzione sono garantiti per essere corretti, auto-documentati e aggiornati. Questo design favorisce l'adozione da parte dei nuovi utenti.
  • Di conseguenza, i team sono più disposti a investire in idee di prodotti ML: al momento della stesura di questo post, abbiamo diversi altri team che esplorano idee di prodotti ML seguendo un approccio simile: dare priorità alla coda di ispezione delle inserzioni, prevedere la probabilità che le inserzioni aggiungere cohost e automatizzare la segnalazione di elenchi di bassa qualità.

Siamo molto entusiasti del futuro di questo framework e del nuovo paradigma che ha portato. Colmando il divario tra prototipazione e produzione, possiamo veramente consentire ai data scientist e agli ingegneri di perseguire progetti di apprendimento automatico end-to-end e migliorare il nostro prodotto.

Vuoi utilizzare o creare questi strumenti ML? Siamo sempre alla ricerca di persone di talento che si uniscano al nostro team di Data Science e Analytics!

Un ringraziamento speciale ai membri del team Data Science e ML Infra che sono stati coinvolti in questo lavoro: Aaron Keys, Brad Hunter, Hamel Husain, Jiaying Shi, Krishna Puttaswamy, Michael Musson, Nick Handel, Varant Zanoyan, Vaughn Quoss et al. Ulteriori ringraziamenti a Gary Tang, Jason Goodman, Jeff Feng, Lindsay Pettingill per la revisione di questo post sul blog.