Utilizzo del machine learning su Compute Engine per generare suggerimenti sui prodotti

Puoi utilizzare Google Cloud per creare un servizio scalabile, efficiente ed efficace per offrire suggerimenti di prodotti pertinenti agli utenti in un negozio online.

La concorrenza sui siti di vendita online non è mai stata così caotica. I clienti spendono di più per tutti i loro provider, ma spendono meno per i rivenditori. La dimensione media di un singolo carrello è diminuita, in parte a causa del fatto che la concorrenza è a un solo clic di distanza. Offrire consigli pertinenti ai potenziali clienti può svolgere un ruolo centrale nella conversione degli acquirenti in acquirenti e nell'aumento della dimensione media degli ordini.

Dopo aver letto questa soluzione, dovresti essere in grado di configurare un ambiente che supporti un motore per suggerimenti di base che puoi crescere e migliorare in base alle esigenze del tuo particolare carico di lavoro. L'esecuzione di un motore di suggerimenti su Google Cloud ti offre flessibilità e scalabilità nelle soluzioni che vuoi eseguire.

In questa soluzione, potrai osservare come una società immobiliare in affitto può calcolare consigli pertinenti e presentarli ai clienti che visitano un sito web.

Scenario

Samantha è in cerca di una casa in affitto per le sue vacanze. Ha un profilo su un sito web per case vacanze, ma ha già affittato e valutato diversi pacchetti vacanze. Same sta cercando consigli in base alle sue preferenze e ai suoi sapori. Il sistema dovrebbe già conoscere i gusti di Simone. Sembra che le piacesse alloggi del tipo house, in base alla sua pagina delle valutazioni. Il sistema dovrebbe consigliare qualcosa di simile.

L'interfaccia utente consente l'affitto di proprietà per le vacanze

Panoramica delle soluzioni

Per dare consigli, in tempo reale mentre i clienti navigano o via email in un secondo momento, devono succedere diverse cose. In primo luogo, anche se conosci molto poco i tuoi gusti e le tue preferenze, puoi basarti sui consigli solo sugli attributi degli articoli. Il tuo sistema deve però essere in grado di apprendere dagli utenti, raccogliendo dati sui loro gusti e preferenze. Nel tempo e con dati sufficienti, puoi utilizzare gli algoritmi di machine learning per eseguire analisi utili e fornire suggerimenti significativi. Gli input degli altri utenti possono anche migliorare i risultati, consentendo di ripetere periodicamente il sistema. Questa soluzione gestisce un sistema di suggerimenti che dispone già di dati sufficienti per trarre vantaggio dagli algoritmi di machine learning.

In genere, un motore per suggerimenti elabora i dati tramite le quattro fasi seguenti:

Fasi di raccolta, archiviazione, analisi e suggerimento

L'architettura di tale sistema può essere rappresentata dal seguente diagramma:

Architettura con front-end, archiviazione e machine learning

Ogni passaggio può essere personalizzato per soddisfare i requisiti. Il sistema è composto da:

  1. Un frontend scalabile che registra le interazioni degli utenti per raccogliere i dati.

  2. Archiviazione permanente a cui una piattaforma di machine learning può accedere. Il caricamento dei dati in questo spazio di archiviazione può includere diversi passaggi, come l'importazione-esportazione e la trasformazione dei dati.

  3. Una piattaforma di machine learning in grado di analizzare i contenuti esistenti per creare suggerimenti pertinenti.

  4. Spazio di archiviazione che può essere utilizzato dal frontend, in tempo reale o successivamente, in base ai requisiti di tempestività dei suggerimenti.

Scelta dei componenti

Per ottenere un buon compromesso tra velocità, semplicità, controllo dei costi e accuratezza, questa soluzione utilizza App Engine, Cloud SQL e Apache Spark in esecuzione su App Engine utilizzando Dataproc.

App Engine può gestire diverse decine di migliaia di query al secondo, con una gestione ridotta. Che si tratti di creare il sito web o salvare i dati in uno spazio di archiviazione di backend, App Engine ti consente di scrivere il codice ed eseguirne il deployment in produzione in pochi secondi.

Inoltre, Cloud SQL semplifica il deployment. Cloud SQL è in grado di scalare fino a 32 core di macchine virtuali con un massimo di 208 GB di RAM e può aumentare lo spazio di archiviazione on demand fino a 10 TB con 30 IOPS per GB e migliaia di connessioni simultanee. Queste specifiche sono sufficienti per l'esempio in questa soluzione e per un numero elevato di motori per suggerimenti reali. Cloud SQL offre inoltre il vantaggio di essere accessibile direttamente da Spark.

Spark offre prestazioni molto migliori rispetto a una configurazione tipica di Hadoop; Spark può essere da 10 a 100 volte più veloce. Con Spark MLlib, puoi analizzare diverse centinaia di milioni di valutazioni in pochi minuti, il che aumenta l'agilità dei consigli, consentendo all'amministratore di eseguire l'algoritmo più spesso. Spark sfrutta il più possibile la memoria per il calcolo, per ridurre i viaggi di andata e ritorno sul disco. Inoltre, prova a ridurre al minimo gli I/O. Questa soluzione utilizza Compute Engine per ospitare l'infrastruttura di analisi. Compute Engine contribuisce a mantenere il prezzo dell'analisi il più basso possibile attraverso i prezzi on demand al secondo.

Il seguente diagramma mappa il diagramma dell'architettura precedente, ma mostra la tecnologia in uso per ogni passaggio:

L'architettura utilizza App Engine, Cloud SQL, Spark e Compute Engine

Raccolta dei dati

Un motore per suggerimenti può raccogliere dati sugli utenti in base al loro comportamento implicito o al loro input esplicito.

È facile raccogliere i dati sul comportamento perché puoi tenere traccia dei log delle attività degli utenti. La raccolta di questi dati è semplice anche perché non richiede alcuna azione aggiuntiva da parte dell'utente, in quanto sta già utilizzando l'applicazione. Lo svantaggio di questo approccio è che è più difficile analizzare i dati. Ad esempio, filtrare i log interessanti da quelli meno interessanti può essere gravoso. Per visualizzare un esempio di analisi di dati implicito che utilizza le voci di log, consulta Analisi dei log in tempo reale con Fluentd e BigQuery.

I dati di input possono essere più difficili da raccogliere perché gli utenti devono eseguire altre azioni, ad esempio scrivere una recensione. Gli utenti potrebbero non voler fornire questi dati per una serie di motivi. Tuttavia, quando si tratta di comprendere le preferenze degli utenti, i risultati sono piuttosto precisi.

Archiviazione dei dati

Maggiori saranno i dati che potrai rendere disponibili per i tuoi algoritmi, migliori saranno i consigli. Ciò significa che qualsiasi progetto di suggerimenti può trasformarsi rapidamente in un progetto di big data.

Il tipo di dati che utilizzi per creare i suggerimenti può aiutarti a decidere il tipo di spazio di archiviazione da utilizzare. Puoi scegliere di utilizzare un database NoSQL, un database SQL standard o persino un tipo di archiviazione di oggetti. Ognuna di queste opzioni è fattibile a seconda che tu stia acquisendo l'input o il comportamento degli utenti e in base a fattori come la facilità di implementazione, la quantità di dati che l'archiviazione può gestire, l'integrazione con il resto dell'ambiente e la portabilità.

Quando salvi le valutazioni o gli eventi degli utenti, un database scalabile e gestito riduce al minimo la quantità di attività operative necessarie e aiuta a concentrarsi sul consiglio. Cloud SQL soddisfa entrambe queste esigenze e semplifica anche il caricamento dei dati direttamente da Spark.

L'esempio di codice seguente mostra gli schemi delle tabelle di Cloud SQL. La tabella Accommodation rappresenta la proprietà in affitto e la tabella Rating rappresenta la valutazione di un utente per una determinata proprietà.

CREATE TABLE Accommodation
(
  id varchar(255),
  title varchar(255),
  location varchar(255),
  price int,
  rooms int,
  rating float,
  type varchar(255),
  PRIMARY KEY (ID)
);

CREATE TABLE Rating
(
  userId varchar(255),
  accoId varchar(255),
  rating int,
  PRIMARY KEY(accoId, userId),
  FOREIGN KEY (accoId)
    REFERENCES Accommodation(id)
);

Spark può ricevere dati da varie origini, ad esempio Hadoop HDFS o Cloud Storage. Questa soluzione riceve i dati direttamente da Cloud SQL utilizzando il connettore JDBC (Java Database Connectivity). Poiché i job Spark vengono eseguiti in parallelo, il connettore deve essere disponibile in tutte le istanze del cluster.

Analisi dei dati

La progettazione della fase di analisi richiede la comprensione dei requisiti dell'applicazione. Tali requisiti includono:

  • La tempestività di un consiglio. Quanto tempo è necessario per presentare applicazioni?

  • L'approccio al filtro per i dati. L'applicazione baserà i suoi suggerimenti sui gusti degli utenti, sposterà i dati in base alle opinioni di altri utenti o su quali prodotti si integrano logicamente?

Informazioni sulle tempistiche

Il primo fattore da considerare per l'analisi dei dati è la velocità con cui devi presentare i consigli all'utente. Se vuoi presentare subito i consigli, ad esempio quando l'utente sta visualizzando un prodotto, avrai bisogno di un tipo di analisi più agile rispetto a quello che sarebbe, ad esempio, per inviare al cliente un'email che contiene consigli in un secondo momento.

  • I sistemi in tempo reale possono elaborare i dati mentre vengono creati. Questo tipo di sistema di solito riguarda strumenti in grado di elaborare e analizzare stream di eventi. Per fornire consigli in tempo reale, sarà necessario un sistema in tempo reale.

  • L'analisi batch richiede l'elaborazione periodica dei dati. Questo approccio presuppone la necessità di creare dati sufficienti per rendere l'analisi pertinente, ad esempio il volume giornaliero delle vendite. Un sistema batch potrebbe funzionare correttamente per inviare un'email in un secondo momento.

  • L'analisi in tempo quasi reale consente di raccogliere rapidamente i dati per poterli aggiornare a intervalli di pochi minuti o secondi. Un sistema quasi in tempo reale potrebbe essere utile per fornire consigli durante la stessa sessione di navigazione.

Un consiglio potrebbe rientrare in una qualsiasi di queste tre categorie di tempestività, ma per uno strumento di vendita online potresti prendere in considerazione qualcosa tra l'elaborazione batch e l'elaborazione quasi in tempo reale, a seconda della quantità di traffico e di input dell'applicazione. La piattaforma in cui viene eseguita l'analisi potrebbe funzionare direttamente da un database in cui vengono salvati i dati o in un dump salvato periodicamente in uno spazio di archiviazione permanente.

Filtrare i dati

Un componente fondamentale di un motore per suggerimenti è il filtro. Gli approcci più comuni includono:

  • Basato sui contenuti: un prodotto consigliato e consigliato ha attributi simili a quelli a cui l'utente visualizza o piace.

  • Cluster: i prodotti consigliati vanno bene insieme, indipendentemente da ciò che hanno fatto gli altri utenti.

  • Collaborazione: anche altri utenti, a cui sono piaciuti gli stessi prodotti che visualizzano o che preferiscono, hanno consigliato un prodotto consigliato.

Sebbene Google Cloud possa supportare uno qualsiasi di questi approcci, questa soluzione si concentra sui filtri collaborativi, che vengono implementati utilizzando Apache Spark. Per ulteriori informazioni sui filtri basati sui contenuti o sui filtri dei cluster, consulta l'appendice.

I filtri collaborativi consentono di rendere astratti gli attributi dei prodotti e di fare previsioni in base ai gusti degli utenti. L'output di questo filtro si basa sull'ipotesi che due utenti diversi a cui sono piaciuti gli stessi prodotti in passato probabilmente saranno gli stessi.

Puoi rappresentare i dati sulle valutazioni o sulle interazioni come un insieme di matrici, con prodotti e utenti come dimensioni. Il filtro collaborativo tenta di prevedere le celle mancanti in una matrice per una specifica coppia utente-prodotto. Le seguenti due matrici sono simili, ma la seconda viene dedotta dalla prima sostituendo le valutazioni esistenti con il numero uno e le valutazioni mancanti per il numero zero. La matrice risultante è una tabella di verità in cui un numero rappresenta un'interazione da parte degli utenti con un prodotto.

Matrice di valutazione Matrice di interazione
Matrice di valutazione Matrice di valutazione

Esistono due approcci distinti per l'utilizzo del filtro collaborativo:

  • Il filtro basato sulla memoria calcola le somiglianze tra prodotti o utenti.

  • Il filtro basato su modelli tenta di apprendere il pattern sottostante che determina il modo in cui gli utenti valutano o interagiscono con gli elementi.

Questa soluzione utilizza l'approccio basato sul modello, in cui gli utenti hanno valutato gli elementi.

Tutte le funzionalità di analisi richieste da questa soluzione sono disponibili tramite PySpark,che fornisce un'interfaccia Python al linguaggio di programmazione Spark. Altre opzioni sono disponibili utilizzando Scala o Java; consulta la documentazione di Spark.

Addestramento dei modelli

Spark MLlib implementa l'algoritmo Alternating Least Squares (ALS) per addestrare i modelli. Userai varie combinazioni dei seguenti parametri per ottenere il miglior compromesso possibile tra varianza e bias:

  • Rank: il numero di fattori sconosciuti che hanno portato un utente a dare una valutazione. tra cui età, sesso o località. Più alto è il ranking, migliore sarà il consiglio, in qualche misura. È un buon approccio iniziare da 5 e aumentare di 5 fino a quando la velocità di miglioramento dei suggerimenti non rallenta, la memoria e l'autorizzazione della CPU.

  • Lambda: un parametro di regolazione per evitare l'overfitting, rappresentato da varianza elevata e bias basse. La varianza rappresenta in che misura le previsioni fluttuano in un determinato punto, su più esecuzioni, rispetto al valore teoricamente corretto per quel punto. Il bias rappresenta la distanza tra le previsioni generate dal valore reale che stai cercando di prevedere. L'overfiting si verifica quando il modello funziona bene sui dati di addestramento utilizzando il rumore noto, ma non ha un buon rendimento sui dati di test effettivi. Più alto è il lambda, minore è l'overfitting, ma maggiore è il bias. I valori 0,01, 1 e 10 sono validi da testare.

    Il seguente diagramma mostra la relazione tra varianza e bias. Il Centro assistenza rappresenta il valore che l'algoritmo cerca di prevedere.

    Varianza rispetto a Bias (il migliore è in alto a sinistra)
    Varianza e bias
  • Iterazione: il numero di volte in cui verrà eseguito l'addestramento. In questo esempio, eseguirai 5, 10 e 20 iterazioni per varie combinazioni di ranking e lambda.

Il seguente codice di esempio mostra come avviare un'esecuzione di addestramento di modelli ALS in Spark.

from pyspark.mllib.recommendation import ALS
model = ALS.train(training, rank = 10, iterations = 5, lambda_=0.01)

Trovare il modello giusto

I filtri collaborativi che utilizzano l'algoritmo ALS si basano su tre diversi set di dati:

  • Set di addestramento: contiene i dati con output noto. Questo insieme dovrebbe avere il risultato perfetto. In questa soluzione contiene le valutazioni degli utenti.

  • Set di convalida: contiene i dati che ti aiuteranno a perfezionare l'addestramento per scegliere la giusta combinazione di parametri e il modello migliore.

  • Set di test: contiene i dati che verranno utilizzati per valutare le prestazioni del modello con il miglior addestramento. Corrisponderebbe a eseguire l'analisi in un esempio reale.

Per trovare il modello migliore, devi calcolare l'errore quadratico medio (RMSE) in base a quello calcolato, al set di convalida e alle dimensioni. Più basso è il valore RMSE, migliore è il modello.

Fornire i consigli

Per rendere i risultati disponibili all'utente in modo rapido e semplice, devi caricarli in un database che può essere interrogato on demand. Anche in questo caso, Cloud SQL è un'ottima opzione. Da Spark 1.4, puoi scrivere i risultati della previsione direttamente nel database da PySpark.

Lo schema della tabella Recommendation ha il seguente aspetto:

CREATE TABLE Recommendation
(
  userId varchar(255),
  accoId varchar(255),
  prediction float,
  PRIMARY KEY(userId, accoId),
  FOREIGN KEY (accoId)
    REFERENCES Accommodation(id)
);

Procedura dettagliata sul codice

Questa sezione illustra il codice per l'addestramento dei modelli.

Acquisire i dati da Cloud SQL

Il contesto Spark SQL ti consente di connetterti facilmente a un'istanza Cloud SQL tramite il connettore JDBC. I dati caricati sono in formato DataFrame.

jdbcUrl    = 'jdbc:mysql://%s:3306/%s?user=%s&password=%s' % (CLOUDSQL_INSTANCE_IP, CLOUDSQL_DB_NAME, CLOUDSQL_USER, CLOUDSQL_PWD)
dfAccos = sqlContext.read.jdbc(url=jdbcUrl, table=TABLE_ITEMS)
dfRates = sqlContext.read.jdbc(url=jdbcUrl, table=TABLE_RATINGS)

Converti DataFrame in RDD e crea i vari set di dati

Spark utilizza un concetto chiamato resient Distributed Dataset (RDD), che facilita il lavoro su elementi in parallelo. Gli RDD sono raccolte di sola lettura create da un'archiviazione permanente. Possono essere elaborati in memoria, quindi sono più adatti all'elaborazione iterativa.

Ricorda che per ottenere il modello migliore per effettuare la tua previsione, devi suddividere i set di dati in tre set diversi. Il seguente codice utilizza una funzione helper che suddivide casualmente i valori non sovrapposti in base a una percentuale del 60/20/20:

rddTraining, rddValidating, rddTesting = dfRates.rdd.randomSplit([6,2,2])

Addestrare i modelli in base a vari parametri

Ricorda che, quando usa il metodo ALS, il sistema deve lavorare con i parametri ranking, regolazione e iterazione per trovare il modello migliore. Le valutazioni esistono, pertanto i risultati della funzione train devono essere confrontati con l'insieme di convalida. Vuoi assicurarti che i gusti dell'utente siano inclusi anche nel set di formazione.

for cRank, cRegul, cIter in itertools.product(ranks, reguls, iters):

  model = ALS.train(rddTraining, cRank, cIter, float(cRegul))
  dist = howFarAreWe(model, rddValidating, nbValidating)
  if dist < finalDist:
    print("Best so far:%f" % dist)
    finalModel = model
    finalRank  = cRank
    finalRegul = cRegul
    finalIter  = cIter
    finalDist  = dist
def howFarAreWe(model, against, sizeAgainst):
  # Ignore the rating column
  againstNoRatings = against.map(lambda x: (int(x[0]), int(x[1])) )

  # Keep the rating to compare against
  againstWiRatings = against.map(lambda x: ((int(x[0]),int(x[1])), int(x[2])) )

  # Make a prediction and map it for later comparison
  # The map has to be ((user,product), rating) not ((product,user), rating)
  predictions = model.predictAll(againstNoRatings).map(lambda p: ( (p[0],p[1]), p[2]) )

  # Returns the pairs (prediction, rating)
  predictionsAndRatings = predictions.join(againstWiRatings).values()

  # Returns the variance
  return sqrt(predictionsAndRatings.map(lambda s: (s[0] - s[1]) ** 2).reduce(add) / float(sizeAgainst))

Calcolo delle previsioni principali per l'utente

Ora che disponi di un modello in grado di fornire una previsione ragionevole, puoi utilizzarlo per vedere in quale misura l'utente potrebbe essere interessato, in base ai suoi gusti e alle valutazioni di altri con gusti simili. In questo passaggio, puoi vedere la mappatura della matrice descritta in precedenza.

# Build our model with the best found values
# Rating, Rank, Iteration, Regulation
model = ALS.train(rddTraining, BEST_RANK, BEST_ITERATION, BEST_REGULATION)

# Calculate all predictions
predictions = model.predictAll(pairsPotential).map(lambda p: (str(p[0]), str(p[1]), float(p[2])))

# Take the top 5 ones
topPredictions = predictions.takeOrdered(5, key=lambda x: -x[2])
print(topPredictions)

schema = StructType([StructField("userId", StringType(), True), StructField("accoId", StringType(), True), StructField("prediction", FloatType(), True)])

dfToSave = sqlContext.createDataFrame(topPredictions, schema)
dfToSave.write.jdbc(url=jdbcUrl, table=TABLE_RECOMMENDATIONS, mode='overwrite')

Salvataggio delle previsioni principali

Ora che hai un elenco di tutte le previsioni, puoi salvare le prime 10 in Cloud SQL in modo che il sistema possa offrire alcuni consigli all'utente. Ad esempio, un buon momento per utilizzare queste previsioni potrebbe essere quando l'utente accede al sito.

dfToSave = sqlContext.createDataFrame(topPredictions, schema)
dfToSave.write.jdbc(url=jdbcUrl, table=TABLE_RECOMMENDATIONS, mode='overwrite')

Esecuzione della soluzione

Per eseguire questa soluzione, segui le istruzioni dettagliate riportate nella pagina di GitHub. Seguendo le indicazioni, dovresti essere in grado di calcolare e visualizzare i consigli per l'utente.

Il codice SQL finale recupera il suggerimento principale dal database e lo mostra nella pagina di benvenuto di Samantha.

Quando viene eseguita nella console o in un client MySQL, la query restituisce un risultato simile all'esempio seguente:

Risultati della query SQL per 5 utenti

All'interno del sito, la stessa query può ottimizzare la pagina di benvenuto e aumentare la probabilità di conversione di un visitatore in un cliente:

Interfaccia utente con risultati

La situazione sembra essere abbastanza simile a quella apprezzata da Sam in base a ciò che il sistema era già a conoscenza di Sam, come spiegato nella descrizione dello scenario.

Tutorial

Puoi trovare i contenuti completi del tutorial, incluse le istruzioni di configurazione e il codice sorgente, da GitHub.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi.

Passaggi successivi

  • Esplora architetture di riferimento, diagrammi, tutorial e best practice su Google Cloud. Dai un'occhiata al nostro Cloud Architecture Center.
  • Scopri come utilizzare i prodotti Google Cloud per creare soluzioni end-to-end.
  • Scopri di più sul monitoraggio leggendo la documentazione di Dataproc sull'output o sulle interfacce web.

Appendice

Filtro incrociato

Anche se hai visto come creare una soluzione di filtraggio collaborativa efficace e scalabile, l'abbinamento dei risultati ad altri tipi di filtri può migliorare il consiglio. Richiama gli altri due tipi principali di filtri: basati sui contenuti e clustering. Una combinazione di questi approcci può generare un consiglio migliore per l'utente.

Tipi di filtro

Filtri basati sui contenuti

Il filtro basato sui contenuti funziona direttamente con gli attributi degli elementi e comprende le loro similitudini, il che facilita la creazione di consigli per gli elementi che hanno attributi ma poche valutazioni degli utenti. Man mano che la base utenti cresce, questo tipo di filtro è gestibile, anche con un numero elevato di utenti.

Per aggiungere filtri basati sui contenuti, puoi utilizzare le valutazioni precedenti di altri utenti per gli elementi del catalogo. In base a queste valutazioni puoi trovare i prodotti più simili a quelli attuali.

Un modo comune per calcolare la somiglianza tra due prodotti consiste nell'utilizzare la similitudine del coseno e trovare i vicini più vicini:

Formula della somiglianza coseno

Diagramma di somiglianza del coseno

Il risultato di somiglianza sarà compreso tra 0 e 1. Più i prodotti sono simili, più i prodotti sono simili.

Spettro di somiglianza del coseno

Considera la seguente matrice:

Formula della somiglianza coseno

In questa matrice, la somiglianza tra P1 e P2 può essere calcolata come segue:

Formula della somiglianza coseno con risultato

I filtri basati sui contenuti consentono di accedere a vari strumenti. Per saperne di più, consulta:

  • Similarità Twitter per tutte le coppie. La funzione CosineSimilarities Scala aggiunta a MLlib può essere eseguita nell'ambiente Spark.

  • Mahout Se vuoi accedere a più librerie per completare o sostituire un algoritmo MLlib, puoi installare Mahout sul nodo del controller Dataproc (master) utilizzando ssh per la connessione all'istanza o utilizzando un'azione di inizializzazione:

    sudo apt-get update
    sudo apt-get install mahout -y
    

Cluster

È inoltre importante comprendere il contesto di navigazione e l'oggetto corrente della visualizzazione. La stessa persona che naviga in momenti diversi potrebbe essere interessato a due prodotti completamente diversi o persino acquistare un regalo da qualcun altro. È fondamentale capire quali elementi sono simili a quelli attualmente visualizzati. L'utilizzo del clustering K-mean consente al sistema di inserire elementi simili in bucket, in base ai loro attributi principali.

Per questa soluzione, una persona che cerca di affittare una casa a Londra, ad esempio, probabilmente non è interessata ad affittare qualcosa a Auckland al momento, quindi il sistema dovrebbe filtrare questi casi quando offre una raccomandazione.

from pyspark.mllib.clustering import KMeans, KMeansModel
clusters = KMeans.train(parsedData, 2,
                        maxIterations=10,
                        runs=10,
                        initializationMode="random")

360 gradi

Puoi migliorare ulteriormente il consiglio prendendo in considerazione altri dati dei clienti, come ordini precedenti, assistenza e attributi personali come età, località o genere. Questi attributi, che sono spesso disponibili in un sistema di gestione dei rapporti con i clienti (CRM) o di gestione delle risorse aziendali, consentono di restringere le scelte.

Pensando più in dettaglio, non solo sono i dati interni del sistema che avranno un impatto sul comportamento e sulle scelte degli utenti, ma anche i fattori esterni. In questo caso d'uso per il noleggio di vacanze, è importante sapere la qualità dell'aria per una giovane famiglia. Quindi, l'integrazione di un motore per suggerimenti basato su Google Cloud con un'altra API, come Breezometer, potrebbe portare un vantaggio competitivo.