Esplorazione del potere e dei limiti di GPT-4

Esplorazione di GPT-4 potere e limiti

 

Ti sei mai chiesto come il nuovo, più avanzato GPT-4 si confronta con il suo predecessore, ChatGPT 3.5?

Cosa fa di GPT-4 un modello particolare e quali sono i suoi limiti?

Mentre esploriamo i limiti dei modelli di linguaggio e le loro potenziali applicazioni, è fondamentale comprendere queste sfumature.

In questo viaggio nel mondo dell’intelligenza artificiale, metteremo in evidenza le caratteristiche distintive di ChatGPT 4, i suoi innovativi plug-in e come stanno rivoluzionando il modo in cui risolviamo domande tecniche e problemi nel campo della data science.

Dalla gestione della complessità delle statistiche e della probabilità, fino alla risoluzione di problemi di modellazione complessi e alle query di codifica in Python, SQL o R, esploreremo tutti i modi in cui GPT-4 può assistere nella data science.

Quindi, preparati a intraprendere questo viaggio esplorativo, svelando gli strati di GPT-4 e la sua capacità di ridisegnare il nostro approccio alla data science!

 

ChatGPT 3.5 e ChatGPT 4

 

GPT-3.5, anche conosciuto come ChatGPT, è stato reso pubblico da OpenAI nel novembre 2022.

È diventato immediatamente popolare in tutto il mondo. È diventato così popolare che a volte ha superato la capacità del server, il che ha portato OpenAI a introdurre una versione a pagamento, ChatGPT Plus, per gestire la domanda.

Passando da GPT-3.5, è stato rilasciato GPT-4 il 14 marzo, che presenta un significativo aggiornamento.

Ha capacità di ragionamento avanzate e, anche se può generare significato dai dati anziché dal testo (come le immagini), la versione attuale di ChatGPT+ è ancora solo testo in output.

La capacità di risoluzione dei problemi di GPT-4 è più accurata rispetto a GPT-3.5.

Attualmente, la versione a pagamento di ChatGPT+ costa $20 al mese. Tuttavia, ha delle restrizioni, come il limite di 25 messaggi ogni 3 ore.

Inoltre, il motore di ricerca di Microsoft, Bing, sta eseguendo una versione personalizzata di GPT-4.

Per ulteriori informazioni, qui c’è il post del blog ufficiale su GPT-4 sul sito di OpenAI.

 

Plugin di ChatGPT

 

 

OpenAI ha presentato una nuova funzionalità per ChatGPT – i plugin – il 23 marzo.

Questi strumenti sono progettati per ampliare le capacità del modello di linguaggio, consentendogli di accedere alle informazioni più recenti e di eseguire calcoli.

L’introduzione di questi plugin viene fatta gradualmente per valutarne l’utilizzo pratico, l’impatto e le potenziali questioni di sicurezza e allineamento.

Diverse aziende, tra cui KAYAK, Klarna, Milo, Shopify, Slack, Speak, Wolfram, Zapier e altre, hanno sviluppato il set iniziale di plugin.

Questi plugin offrono un’ampia gamma di funzionalità, come la pianificazione dei viaggi, l’ordinazione dei generi alimentari, l’accesso ai calcoli e il recupero dei dati in tempo reale.

OpenAI fornisce anche due plugin: un browser web e un interprete di codice.

Mentre il browser web ti permette di navigare in rete con la potenza del modello GPT, un interprete di codice ti aiuterà a manipolare ed analizzare i tuoi dati semplicemente con un prompt.

Alcuni di questi plugin, come Noteable e Wolfram, sono particolarmente utili nella data science.

Questi plugin sono pensati per aumentare l’utilità di ChatGPT.

 

È Possibile Utilizzare GPT-4 per Rispondere a Domande Tecniche nella Data Science?

 

Possiamo suddividere le domande di data science in domande non di codifica e domande di intervista di codifica.

Testando la capacità di ChatGPT4 in queste sezioni, comprenderemo meglio come ChatGPT4 può essere utilizzato per rispondere a domande tecniche nella data science.

Iniziamo con le domande non di codifica.

 

Domande Non di Codifica

 

Qui, divideremo le domande non codificate in statistica, probabilità e modellazione.  

 

Statistica

 

La statistica è vitale per la scienza dei dati, comprendendo la raccolta, l’analisi, l’interpretazione, la visualizzazione e l’organizzazione dei dati.

GPT-4 è in grado di rispondere alle domande sui concetti statistici, offrendo una comprensione completa dei principi statistici complessi.

Utilizzando GPT-4 in questo modo è possibile migliorare la comprensione delle teorie statistiche ed aiutare gli scienziati dei dati ad estrarre informazioni significative dai dati.

   

Ecco la domanda di statistica che useremo per testare le capacità della Chat. Utilizzeremo il plug-in Wolfram, che aiuta gli utenti durante i calcoli.

Inoltre, una nota importante nell’utilizzo di ChatGPT-4 e dei suoi plugin: possono essere buoni, ma non sono perfetti, quindi controllate sempre il risultato perché potrebbe essere sbagliato.

Prompt: Perché l’MSE viene frequentemente utilizzato come funzione di errore per la regressione lineare?

(Utilizzare il plug-in Wolfram, fornire le formule)

ChatGPT : La formula per l’MSE è:

   

dove:

Ecco i motivi per cui l’MSE viene comunemente utilizzato:

  1. Differenziabilità: l’MSE è una funzione liscia e differenziabile. Questo è importante perché gli algoritmi di ottimizzazione, come la discesa del gradiente, si basano sulla derivata della funzione per trovare il minimo.
  2. Sensibilità agli outlier: il termine di elevamento al quadrato nell’MSE dà maggior peso agli errori più grandi. Ciò significa che il modello sarà più sensibile agli outlier e cercherà di minimizzare gli errori più grandi.
  3. Interpretabilità: l’MSE è facile da interpretare in quanto rappresenta la differenza quadratica media tra i valori previsti e quelli effettivi. Un MSE più basso indica un migliore adattamento del modello ai dati.
  4. Convessità: l’MSE porta ad un paesaggio di perdita convesso. I problemi convessi hanno un singolo minimo globale, rendendoli più facili da risolvere utilizzando algoritmi di ottimizzazione.
  5. Coerenza con OLS: nel caso della regressione lineare, minimizzare l’MSE è equivalente a minimizzare i residui in Ordinary Least Squares (OLS), che è il metodo standard per stimare i parametri di un modello di regressione lineare.

Nota dell’autore: anche se l’MSE ha questi vantaggi, non è sempre la scelta migliore per ogni problema di regressione. A seconda delle caratteristiche specifiche dei dati e del problema in questione, altre funzioni di errore potrebbero essere più appropriate.

Controllo

La risposta di ChatGPT è dettagliata e corretta.

 

Probabilità

 

La probabilità è fondamentale per la scienza dei dati in quanto offre una struttura per effettuare previsioni sui dati e comprendere l’incertezza. Può illustrare in dettaglio questi concetti, spiegando i calcoli matematici e la logica alla base della probabilità di un evento specifico.

Questo aiuta gli scienziati dei dati nella costruzione di modelli e nella presa di decisioni intelligenti basate sul ragionamento probabilistico.

   

Ecco la domanda di probabilità che ChatGPT cercherà di risolvere.

Prompt: Stai giocando a un gioco con un amico in cui lanci due dadi a sei facce. Se la somma dei due dadi è 7 o 11, vinci; altrimenti il tuo amico vince. Qual è la probabilità che tu vinca al primo lancio?

ChatGPT: Per determinare la probabilità di vincere al primo lancio, dobbiamo calcolare il numero di risultati favorevoli (risultati vincenti) e dividerli per il numero totale di risultati possibili.

In questo caso, ci sono 6 risultati possibili per ogni dado, poiché sono dadi a sei facce equi. Pertanto, il numero totale di risultati quando si lanciano due dadi è: 66 =36

Per vincere al primo lancio, la somma dei due dadi deve essere o 7 o 11. Possiamo calcolare il numero di risultati favorevoli nel seguente modo:

  1. Somma di 7: Ci sono 6 modi per ottenere questo risultato: (1, 6), (2, 5), (3, 4), (4, 3), (5, 2) e (6, 1).
  2. Somma di 11: Ci sono 2 modi per ottenere questo risultato: (5, 6) e (6, 5).

Quindi, ci sono un totale di 6 + 2 = 8 risultati favorevoli.

Ora, possiamo calcolare la probabilità di vincere al primo lancio dividendo il numero di risultati favorevoli per il numero totale di risultati possibili:

Probabilità di vincere al primo lancio = Numero di risultati favorevoli / Numero totale di risultati possibili = 8 / 22 = 2 / 9 = 0,222

Quindi, la probabilità di vincere al primo lancio è approssimativamente 0,222 o 22,2%.

Controllo

L’output è corretto e corrisponde alla soluzione della piattaforma.

 

Modellazione

 

La modellazione è il processo di creazione di una rappresentazione matematica di un sistema per analizzarne e prevederne il comportamento.

Può aiutare gli scienziati dei dati a comprendere concetti, ipotesi, implementazione e interpretazione dei loro risultati. Ciò porta a previsioni migliorate e comprensione dei dati.

   

Ecco la domanda di modellazione che stiamo per testare.

Prompt : Come funziona l’algoritmo K-means?

ChatGPT : L’algoritmo K-means è un algoritmo di clustering iterativo che mira a partizionare un determinato set di dati in K cluster, dove K è un parametro definito dall’utente.

Funziona nel seguente modo:

  1. Inizializzazione: Seleziona casualmente K punti dati dal set di dati come centroidi iniziali (punti rappresentativi) dei cluster.
  2. Assegnazione: Assegna ogni punto dati al centroide più vicino in base a una metrica di distanza, di solito la distanza euclidea. Questo passaggio forma K cluster.
  3. Aggiornamento: Ricalcola i centroidi dei cluster prendendo la media di tutti i punti dati assegnati a ciascun cluster. Questo passaggio mira a trovare centroidi migliori che rappresentano il centro di ogni cluster.
  4. Iterazione: Ripeti iterativamente i passaggi di assegnazione e aggiornamento fino alla convergenza. La convergenza si verifica quando i centroidi smettono di cambiare significativamente o quando viene raggiunto il numero massimo di iterazioni.
  5. Output: L’algoritmo restituisce i K cluster finali, in cui ogni punto dati appartiene al cluster con il centroide più vicino.

L’algoritmo K-means cerca di minimizzare la somma dei quadrati delle distanze tra i punti all’interno del cluster, nota anche come inerzia o varianza intra-cluster totale. Si assume che i cluster siano sferici e abbiano varianza uguale. Tuttavia, l’algoritmo può convergere a soluzioni subottimali a seconda dell’inizializzazione dei centroidi.

Per migliorare le prestazioni di K-means, possono essere applicate varie tecniche, come l’utilizzo di più inizializzazioni, l’utilizzo di metodi di inizializzazione dei centroidi più intelligenti (ad esempio K-means++) o l’utilizzo del metodo del gomito per determinare il valore ottimale di K.

È importante notare che K-means è sensibile alla scelta iniziale dei centroidi e può avere difficoltà con set di dati contenenti cluster non lineari o dalla forma irregolare. In tali casi, potrebbero essere più adatti algoritmi di clustering alternativi come DBSCAN o modelli a mistura gaussiana (GMM).

Controllo

La risposta di ChatGPT è dettagliata e corretta.

 

Domande di coding

 

Il coding è obbligatorio per gli scienziati dei dati. Include l’utilizzo di Python per la manipolazione dei dati e il machine learning, SQL per la gestione dei database e R per i calcoli statistici. GPT-4 può aiutare a risolvere problemi di codifica.   Immagine di Autore  

Testiamo ChatGPT-4 su domande di codifica, iniziando con Python.

 

Python

 

Python è un linguaggio molto apprezzato nella comunità della scienza dei dati grazie alla sua natura user-friendly e alla presenza di librerie robuste come pandas, numpy e scikit-learn.

GPT-4 può aiutare nel debug del codice Python, raccomandare le migliori pratiche di programmazione e persino produrre frammenti di codice per compiti specifici.

Proviamolo ora con la seguente domanda.

   

Domanda 1

Ecco la domanda.

Prompt: 

Il nome del mio dataset è airbnb_search_details e qui ci sono ulteriori informazioni;

Unnamed: 0:int64

id:int64

price:float64

property_type: object

room_type: object

amenities:object

accommodates:int64

bathrooms:int64

bed_type:object  

cancellation_policy:object 

cleaning_fee:bool

city:object 

host_identity_verified:object

host_response_rate:object

host_since:datetime64[ns]

neighbourhood:object

number_of_reviews:int64

review_scores_rating:float64

zipcode:int64

bedrooms:int64

beds:int64

La domanda è: Trova tutte le ricerche di alloggi in cui il numero di camere da letto è uguale al numero di bagni. Assicurati che il tipo di output atteso sia un dataframe.

Note dell’autore: Per alimentare il dataset nella Chat, basta copiarlo dalla piattaforma come mostrato di seguito.

ChatGPT: Per trovare tutte le ricerche di alloggi in cui il numero di camere da letto è uguale al numero di bagni, puoi utilizzare il seguente codice in Python:

import pandas as pd
# Supponendo che 'airbnb_search_details' sia il DataFrame contenente il tuo dataset
# Sostituisci 'airbnb_search_details' con il nome effettivo del tuo DataFrame se diverso
# Filtra il DataFrame in base alla condizione: numero di camere da letto == numero di bagni
result = airbnb_search_details[airbnb_search_details['bedrooms'] == airbnb_search_details['bathrooms']]
# Mostra il DataFrame risultante
print(result)

 

Controllo

In realtà, gran parte della risposta di ChatGPT è corretta, ad eccezione dell’ultima riga. Non c’è bisogno di stampare il dataframe risultante utilizzando la funzione print, quindi la soluzione funziona quando il codice viene aggiornato come segue.

import pandas as pd
# Supponendo che 'airbnb_search_details' sia il DataFrame contenente il tuo dataset
# Sostituisci 'airbnb_search_details' con il nome effettivo del tuo DataFrame se diverso
# Filtra il DataFrame in base alla condizione: numero di camere da letto == numero di bagni
result = airbnb_search_details[airbnb_search_details['bedrooms'] == airbnb_search_details['bathrooms']]
# Mostra il DataFrame risultante
result

 

Domanda 2

Ecco la domanda da LeetCode che inserirò nella ChatGPT-4.

   

Andrò semplicemente a copiare e incollare tutte le informazioni nel mio prompt.

Prompt

Dato un array di interi nums e un intero val, rimuovi tutte le occorrenze di val in nums sul posto. L’ordine degli elementi può essere modificato. Quindi restituisci il numero di elementi in nums che non sono uguali a val.

Considera il numero di elementi in nums che non sono uguali a val come k, per essere accettato, devi fare le seguenti cose:

Modifica l’array nums in modo che i primi k elementi di nums contengano gli elementi che non sono uguali a val. Gli elementi rimanenti di nums non sono importanti così come la dimensione di nums.

Restituisci k.

Judge personalizzato:

Il giudice testerà la tua soluzione con il seguente codice:

int[] nums = […]; // Array di input

int val = …; // Valore da rimuovere

int[] expectedNums = […]; // Risposta attesa con lunghezza corretta.

// È ordinato senza valori uguali a val.

int k = removeElement(nums, val); // Chiama la tua implementazione

assert k == expectedNums.length;

sort(nums, 0, k); // Ordina i primi k elementi di nums

for (int i = 0; i < actualLength; i++) {

assert nums[i] == expectedNums[i];

}

Se tutte le asserzioni passano, allora la tua soluzione sarà accettata.

Esempio 1:

Input: nums = [3,2,2,3], val = 3

Output: 2, nums = [2,2,_,_]

Spiegazione: La tua funzione dovrebbe restituire k = 2, con i primi due elementi di nums che sono 2.

Non importa cosa lasci oltre il k restituito (quindi sono trattini bassi).

Esempio 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2

Output: 5, nums = [0,1,4,0,3,_,_,_]

Spiegazione: La tua funzione dovrebbe restituire k = 5, con i primi cinque elementi di nums contenenti 0, 0, 1, 3 e 4.

Nota che i cinque elementi possono essere restituiti in qualsiasi ordine.

Non importa cosa lasci oltre il k restituito (quindi sono trattini bassi).

Vincoli:

0 <= lunghezza di nums <= 100

0 <= nums[i] <= 50

0 <= val <= 100

Il formato della soluzione:

class Solution:

def removeElement(self, nums: List[int], val: int) -> int:

ChatGPT: Ecco la soluzione in Python:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        k = 0  # Contatore per gli elementi diversi da val
        
        # Itera attraverso l'array
        for i in range(len(nums)):
            if nums[i] != val:
                nums[k] = nums[i]  # Sposta l'elemento alla posizione k
                k += 1
        
        return k

 

La soluzione utilizza un approccio a due puntatori per modificare l’array nums sul posto e conteggiare il numero di elementi diversi da val. La variabile k viene utilizzata per tenere traccia della posizione in cui dovrebbe essere posizionato il prossimo elemento diverso da val.

L’algoritmo scorre l’array e ogni volta che incontra un elemento diverso da val, lo sposta alla posizione k e incrementa k. Alla fine, k rappresenta il numero di elementi diversi da val.

Puoi testare la soluzione utilizzando il codice di valutazione personalizzato fornito per verificare se produce l’output atteso per gli esempi forniti e supera le asserzioni.

Controllo

Il codice funziona perfettamente senza bisogno di modifiche.

 

SQL

 

SQL è fondamentale per lavorare con i database. GPT-4 può aiutare a formulare query SQL, migliorare l’efficienza del database e comprendere concetti complessi di SQL.

Domanda 1

Ecco la domanda SQL che cercheremo di risolvere.

   

Prompt : Ecco la domanda: Dopo una recente campagna pubblicitaria, il dipartimento marketing desidera classificare i propri sforzi in base al numero totale di unità vendute per ogni prodotto.

Ti è stato assegnato il compito di calcolare il numero totale di unità vendute per ogni prodotto e categorizzare le prestazioni degli annunci in base ai seguenti criteri per gli articoli venduti:

Eccellente: 30+

Soddisfacente: 20 – 29

Non soddisfacente: 10 – 19

Scarso: 1 – 9

Il tuo output dovrebbe contenere l’ID del prodotto, il numero totale di unità vendute in ordine decrescente e le prestazioni pubblicitarie categorizzate.

Il nome del mio dataset è marketing_campaign ed ecco i tipi di dati.

marketing_campaign

user_id: int

created_at: datetime

product_id: int

quantity: int

price: int

Ecco l’output atteso:

ID_prodotto totale_venduto prestazioni_pubblicitarie

105 41 Eccezionale

102 29 Soddisfacente

114 23 Soddisfacente

118 22 Soddisfacente

120 21 Soddisfacente

Usa mysql per risolvere questo problema.

ChatGPT: Per risolvere questo compito utilizzando MySQL, puoi scrivere una query per calcolare il numero totale di unità vendute per ogni prodotto e categorizzare le prestazioni pubblicitarie in base ai criteri forniti.

Ecco la query:

SELECT
    product_id,
    SUM(quantity) AS total_sold,
    CASE
        WHEN SUM(quantity) >= 30 THEN 'Eccezionale'
        WHEN SUM(quantity) BETWEEN 20 AND 29 THEN 'Soddisfacente'
        WHEN SUM(quantity) BETWEEN 10 AND 19 THEN 'Non soddisfacente'
        WHEN SUM(quantity) BETWEEN 1 AND 9 THEN 'Scarso'
    END AS ad_performance
FROM
    marketing_campaign
GROUP BY
    product_id
ORDER BY
    total_sold DESC;

 

In questa query, selezioniamo l’ID_prodotto, calcoliamo la somma delle quantità come totale_venduto e utilizziamo una dichiarazione CASE per categorizzare le prestazioni pubblicitarie in base al valore totale_venduto. La query raggruppa i risultati per ID_prodotto, li ordina in ordine decrescente di totale_venduto e fornisce l’output desiderato.

Assicurati di sostituire “marketing_campaign” con il nome effettivo della tabella nel database.

Eseguendo questa query otterrai l’output atteso con l’ID_prodotto, il totale_venduto e le prestazioni_pubblicitarie categorizzate secondo i criteri.

Controllo

Il codice funziona perfettamente senza necessità di alcun aggiornamento.

Domanda 2

Ecco la seconda domanda SQL presa da LeetCode.

   

Prompt : Tabella: Vendite

+————-+——-+

| Nome colonna | Tipo  |

+————-+——-+

| sale_id     | int   |

| product_id  | int   |

| year        | int   |

| quantity    | int   |

| price       | int   |

+————-+——-+

(sale_id, year) è la chiave primaria di questa tabella. product_id è una chiave esterna alla tabella Prodotto.

Ogni riga di questa tabella mostra una vendita del prodotto product_id in un determinato anno. Nota che il prezzo è per unità.

Tabella: Prodotto

+————–+———+

| Nome colonna  | Tipo    |

+————–+———+

| product_id   | int     |

| product_name | varchar |

+————–+———+

product_id è la chiave primaria di questa tabella.

Ogni riga di questa tabella indica il nome del prodotto di ogni prodotto.

Scrivi una query SQL che selezioni l’ID_prodotto, l’anno, la quantità e il prezzo per il primo anno di ogni prodotto venduto.

Restituisci la tabella risultante in qualsiasi ordine.

Il formato del risultato della query è l’esempio seguente.

Esempio 1:

Input: 

Tabella Vendite:

+———+————+——+———-+——-+

| sale_id | product_id | year | quantity | price |

+———+————+——+———-+——-+ 

| 1       | 100        | 2008 | 10       | 5000  |

| 2       | 100        | 2009 | 12       | 5000  |

| 7       | 200        | 2011 | 15       | 9000  |

+———+————+——+———-+——-+

Tabella prodotto:

+————+————–+

| product_id | product_name |

+————+————–+

| 100        | Nokia        |

| 200        | Apple        |

| 300        | Samsung      |

+————+————–+

Output: 

+————+————+———-+——-+

| product_id | primo_anno | quantità | prezzo |

+————+————+———-+——-+ 

| 100        | 2008       | 10       | 5000  |

| 200        | 2011       | 15       | 9000  |

+————+————+———-+——-+

ChatGPT: Per selezionare l’id del prodotto, l’anno, la quantità e il prezzo per il primo anno di ogni prodotto venduto, puoi utilizzare la seguente query SQL:

SELECT s.product_id, s.year AS primo_anno, s.quantity, s.price
FROM Sales s
JOIN (
    SELECT product_id, MIN(year) AS primo_anno
    FROM Sales
    GROUP BY product_id
) t ON s.product_id = t.product_id AND s.year = t.primo_anno
ORDER BY s.product_id;

 

Spiegazione:

  1. La sottoquery (SELECT product_id, MIN(year) AS primo_anno FROM Sales GROUP BY product_id) seleziona l’anno minimo per ogni prodotto utilizzando la funzione MIN() e raggruppa i risultati per product_id.
  2. La query principale unisce la tabella Sales con la sottoquery in base alle colonne product_id e year corrispondenti per recuperare i record di vendita per il primo anno di ogni prodotto.
  3. Vengono restituite le colonne selezionate, inclusi product_id, year come primo_anno, quantity e price, dalla tabella Sales per i record corrispondenti.
  4. Il risultato è ordinato per product_id in ordine ascendente.

La query restituirà l’id del prodotto, il primo anno, la quantità e il prezzo per il primo anno di ogni prodotto venduto, come mostrato nell’esempio di output.

Controllo

Il codice funziona perfettamente senza bisogno di alcun aggiornamento.

 

R

 

R è un linguaggio appositamente progettato per valutazioni statistiche e visualizzazione dei dati. GPT-4 può supportare la comprensione delle sfumature del linguaggio R, il debug del codice R e l’utilizzo di vari pacchetti R per l’analisi dei dati.

Domanda

   

Ecco la domanda di codifica.

Prompt:

Ecco la domanda: Per ogni revisore ospite, trovare la nazionalità dell’host preferito del revisore in base al punteggio di recensione più alto dato a un host. Restituire l’ID utente dell’ospite insieme alla nazionalità del loro host preferito. Nel caso in cui ci siano più host preferiti dello stesso paese, elencare quel paese solo una volta (rimuovere i duplicati).

Sia le colonne from_user che to_user sono ID utente.

Ecco l’output atteso;

from_user nazionalità

0 Lussemburgo

1 Brasile

2 Australia

3 Australia

4 Brasile

Ecco i frame di dati;

airbnb_reviews

from_user:int64

to_user:int64

from_type: object

to_type: object

review_score:int64

airbnb_hosts

host_id: int64

nationality: object

gender: object

age:int64

Risolvi questo con R.

Suggerimenti:

Seleziona colonne specifiche dal dataframe usando [nome_colonna] quindi seleziona righe con valori uguali a ‘==’ guest

Usa .groupby(nome_colonna) per raggruppare il dataframe in base alla colonna specificata e max() per ottenere il punteggio massimo dato per gruppo

Esegui una join interna sul dataframe originale e sul dataframe raggruppato per ottenere gli attributi/dettagli corrispondenti del dataframe raggruppato usando pd.merge(dataframe1, dataframe2, on = chiavi_tabella_comuni)

Esegui una join interna sul dataframe risultante e su airbnb_hosts

Usa [ [ nome_colonna/i ] ] per selezionare una colonna specifica del dataframe, quindi usa drop_duplicates(nome_colonna) per ottenere i valori distinti nella colonna specificata.

ChatGPT: Per risolvere questo compito usando R, puoi seguire questi passaggi:

  1. Seleziona le colonne necessarie dal dataframe ‘airbnb_reviews’ e filtra le righe in cui ‘from_type’ è ‘guest’.
  2. Raggruppa il dataframe filtrato per ‘from_user’ e ottieni il punteggio di revisione massimo per ogni ospite usando la funzione max().
  3. Esegui una join interna tra il dataframe originale e il dataframe raggruppato in base alle colonne ‘from_user’ e ‘review_score’ per ottenere le righe corrispondenti con il punteggio di revisione massimo per ogni ospite.
  4. Esegui un’altra join interna tra il dataframe risultante e il dataframe ‘airbnb_hosts’ in base alle colonne ‘to_user’ e ‘host_id’ per ottenere la nazionalità dell’host preferito.
  5. Seleziona le colonne ‘from_user’ e ‘nationality’ dal dataframe finale unito.
  6. Usa la funzione distinct() per rimuovere le righe duplicate in base alla colonna ‘nationality’.

Ecco il codice per ottenere questo:

# Seleziona le colonne necessarie da airbnb_reviews e filtra le righe in cui from_type è 'guest'
filtered_reviews <- airbnb_reviews[airbnb_reviews$from_type == 'guest', c('from_user', 'to_user', 'review_score')]

# Raggruppa per from_user e ottieni il punteggio di revisione massimo per ogni ospite
max_scores <- aggregate(review_score ~ from_user, filtered_reviews, max)

# Esegui una join interna per ottenere le righe con il punteggio di revisione massimo per ogni ospite
joined_df <- merge(filtered_reviews, max_scores, by = c('from_user', 'review_score'))

# Esegui una join interna con airbnb_hosts per ottenere la nazionalità dell'host preferito
final_df <- merge(joined_df, airbnb_hosts, by.x = 'to_user', by.y = 'host_id')

# Seleziona le colonne necessarie dal dataframe finale unito
result <- final_df[, c('from_user', 'nationality')]

# Rimuovi le righe duplicate in base alla nazionalità
distinct_result <- distinct(result, .keep_all = TRUE)

# Stampa il risultato finale
distinct_result

 

Eseguendo questo codice otterrai l’output atteso con ‘from_user’ (ID ospite) e la ‘nationality’ corrispondente del loro host preferito.

Controllo

Il codice funziona perfettamente senza bisogno di alcun aggiornamento.

 

Bonus: Effettuare un Progetto di Dati con ChatGPT

 

Il progetto di dati su cui testeremo ChatGPT è stato utilizzato come compito da svolgere a casa nel processo di selezione per le posizioni di data science presso Uber.

   

In generale, ci sono due scenari differenti;

Scenario 1: Sarà un sabato molto affollato e ci saranno bisogno di molte più macchine in strada rispetto alla settimana scorsa. Per incoraggiare i conducenti a mettersi online, stiamo valutando le seguenti due opzioni bonus in termini di costo:

  • Opzione 1: $50 per ogni conducente che è online per almeno 8 ore, accetta il 90% delle richieste, completa 10 viaggi e ha una valutazione di 4.7 o superiore durante il periodo di tempo;
  • Opzione 2: $4/viaggio per tutti i conducenti che completano 12 viaggi e hanno una valutazione di 4.7 o superiore.

Scenario 2: Un tassista genera attualmente $200 al giorno in tariffe (prima delle spese), lavora sei giorni a settimana, prende tre settimane di pausa e ha le seguenti spese:

  • Carburante – $200 a settimana
  • Assicurazione – $400 al mese
  • Noleggio veicolo (alla settimana) – $500

Il conducente non paga le spese di carburante e noleggio nelle settimane di pausa.

Uploader di file ChatGPT

Ora, per fare un progetto di dati, abbiamo bisogno dell’estensione di Chrome Uploader di file ChatGPT. Ti permetterà di caricare file su ChatGPT.

Non ne hai bisogno se hai già un plug-in di interpretazione del codice: carica semplicemente un file usando questo plug-in.

Per ulteriori informazioni, guarda questo video.

Dopo aver impostato l’estensione Uploader di file, proviamo a risolvere questo progetto di dati.

Apri ChatGPT e clicca il pulsante di questa estensione.

Vedrai il pulsante di invio come mostrato di seguito.

  Fonte: https://chat.openai.com/  

Ora, alimentiamo ChatGPT con il dataset prima usando il nostro file di dataset e cliccando prima il pulsante Invia file.

  Fonte: https://chat.openai.com/  

Dopo aver caricato il dataset, ChatGPT presenterà il dataset.

  Fonte: https://chat.openai.com/  

Ora, ecco il prompt che dovresti usare per risolvere questo progetto di dati.

   

Prompt: Date le situazioni operative e il dataset fornito, rispondi alle seguenti domande usando Python

Compito

Situazione 1: Sarà un grande sabato e ci saranno bisogno di molte più macchine sulla strada rispetto alla settimana scorsa. Per far sì che i conducenti vadano online, stiamo valutando le seguenti due opzioni bonus in termini di costo:

Opzione 1: $50 per ogni conducente che è online almeno 8 ore, accetta il 90% delle richieste, completa 10 viaggi e ha una valutazione di 4.7 o superiore durante il periodo di tempo;

Opzione 2: $4 per viaggio per tutti i conducenti che completano 12 viaggi e hanno una valutazione di 4.7 o superiore.

Usando il dataset fornito e data la Situazione 1, fornire risposte alle domande seguenti:

Quanto sarebbe il totale del bonus con l’Opzione 1?

Quanto sarebbe il totale del bonus con l’Opzione 2?

Quanti conducenti si qualificherebbero per un bonus con l’Opzione 1 ma non con l’Opzione 2?

Qual è la percentuale di conducenti online che ha completato meno di 10 viaggi, ha un tasso di accettazione inferiore al 90% e ha una valutazione di 4.7 o superiore?

Situazione 2: Un tassista genera attualmente $200 al giorno in tariffe (prima delle spese), lavora sei giorni alla settimana, prende tre settimane di ferie e ha le seguenti spese:

Carburante – $200 a settimana

Assicurazione – $400 al mese

Noleggio del veicolo (a settimana) – $500

Il conducente non paga le spese di carburante e noleggio nelle settimane di ferie.

Ora, supponiamo che lo stesso conducente compri una Town Car e faccia squadra con Uber. In tal caso, le spese di carburante aumenterebbero del 5%, le spese assicurative diminuirebbero del 20% e non noleggerebbe più un veicolo. Tuttavia, avrebbe bisogno di comprare una macchina. Il conducente prenderebbe comunque tre settimane di ferie all’anno.

Dato il Contesto 2, fornire risposte alle domande seguenti:

Quanti soldi (dopo le spese) guadagna il tassista all’anno senza fare squadra con Uber?

Stai convincendo lo stesso conducente di cui sopra a comprare una Town Car e fare squadra con Uber. Supponendo che la nuova macchina costi 40.000 USD, di quanto dovrebbero aumentare le tariffe lorda del conducente a settimana per pagare completamente la macchina nell’anno 1 e mantenere lo stesso margine di profitto annuale come prima?

ChatGPT:

Per effettuare questi calcoli, abbiamo prima bisogno di caricare e preprocessare il dataset. Useremo la libreria pandas di Python per caricare il file CSV e analizzare le colonne richieste.

Purtroppo, come modello basato su testo, non posso eseguire direttamente il codice. Ma posso fornirti il codice Python che puoi usare per rispondere alle tue domande:

Ecco il codice di cui avresti bisogno per rispondere alle tue domande per lo Scenario 1:

import pandas as pd

# Carica il dataset
data = pd.read_csv('dataset_2.csv')

# Converti 'Accept Rate' da percentuale stringa a float
data['Accept Rate'] = data['Accept Rate'].str.rstrip('%').astype('float') / 100.0

# Calcola il bonus per entrambe le opzioni
data['Option 1 Bonus'] = ((data['Supply Hours'] >= 8) & (data['Accept Rate'] >= 0.9) & 
                          (data['Trips Completed'] >= 10) & (data['Rating'] >= 4.7)) * 50
data['Option 2 Bonus'] = ((data['Trips Completed'] >= 12) & (data['Rating'] >= 4.7)) * data['Trips Completed'] * 4

# Calcola il pagamento totale per ogni opzione
total_payout_option1 = data['Option 1 Bonus'].sum()
total_payout_option2 = data['Option 2 Bonus'].sum()

# Calcola il numero di autisti che si qualificano solo con l'Opzione 1 ma non con l'Opzione 2
num_option1_only = ((data['Option 1 Bonus'] > 0) & (data['Option 2 Bonus'] == 0)).sum()

# Calcola la percentuale di autisti che completano meno di 10 corse, hanno un tasso di accettazione inferiore al 90% e hanno un punteggio di 4,7 o superiore
percent_undesirable_drivers = ((data['Trips Completed'] < 10) & (data['Accept Rate'] = 4.7)).mean() * 100

print('Pagamento totale del bonus per l\'Opzione 1: $', total_payout_option1)
print('Pagamento totale del bonus per l\'Opzione 2: $', total_payout_option2)
print('Numero di autisti che si qualificano con l\'Opzione 1 ma non con l\'Opzione 2: ', num_option1_only)
print('Percentuale di autisti che completano meno di 10 corse, hanno un tasso di accettazione inferiore al 90% e hanno un punteggio di 4,7 o superiore: ', percent_undesirable_drivers)

 

Ecco il codice per rispondere alle tue domande per lo Scenario 2:

# Calcola il reddito annuale e le spese del tassista
reddito_giornaliero = 200
reddito_settimanale = reddito_giornaliero * 6  # Lavorando 6 giorni a settimana
reddito_annuale = reddito_settimanale * 52  # Lavorando tutto l'anno
spese_annuali = (200 * 49) + (400 * 12) + (500 * 49)  # Nessuna spesa nelle settimane di riposo
reddito_annuale_netto = reddito_annuale - spese_annuali

# Calcola le nuove spese e il reddito netto se il conducente collabora con Uber
nuove_spese_annuali = (200 * 1.05 * 49) + (400 * 0.8 * 12)  # Aumento del 5% del carburante, diminuzione del 20% dell'assicurazione
nuovo_reddito_annuale_netto = reddito_annuale - nuove_spese_annuali - 40000  # Sottrai il costo dell'auto

# Calcola l'aumento delle tariffe lordo necessario per mantenere lo stesso margine di profitto
aumento_reddito_necessario = reddito_annuale_netto - nuovo_reddito_annuale_netto
aumento_reddito_necessario_settimanale = aumento_reddito_necessario / 52

print('Reddito netto annuale del tassista: $', reddito_annuale_netto)
print('Aumento richiesto nelle tariffe lordo settimanali: $', aumento_reddito_necessario_settimanale)

 

Puoi sostituire il percorso del file nella funzione read_csv con il percorso effettivo del tuo file dataset_2.csv e quindi eseguire questi frammenti di codice nel tuo ambiente Python locale.

Controllo

L’output del primo scenario è completamente corretto (le prime 4 domande). Tuttavia, l’output del secondo scenario non è corretto.

Ad esempio, calcola che il conducente lavora 52 settimane (tutto l’anno), mentre il conducente prende 3 settimane di ferie.

Ecco perché devi fare attenzione ai calcoli che ChatGPT fa e controllare i passaggi che segue per essere sicuri del risultato.

Dopo alcuni tentativi, ecco il codice che produce il risultato corretto fornito da ChatGPT.

# Settimane di ferie all'anno
settimane_di_ferie = 3

# Settimane totali all'anno
settimane_totali_allanno = 52

# Settimane lavorative all'anno
settimane_lavorative = settimane_totali_allanno - settimane_di_ferie

# Mesi totali all'anno
mesi_totali_allanno = 12

# Spese
carburante_settimanale = 200
assicurazione_mensile = 400
affitto_veicolo_settimanale = 500

# Ricavi
tariffa_giornaliera = 200 
giorni_lavorativi_settimanali = 6
ricavi_totali = tariffa_giornaliera * giorni_lavorativi_settimanali * settimane_lavorative

# Spese totali
spese_totali = (carburante_settimanale + affitto_veicolo_settimanale) * settimane_lavorative + assicurazione_mensile * mesi_totali_allanno

# Reddito netto
reddito_netto = ricavi_totali - spese_totali

print("Reddito netto annuale: $", reddito_netto)

# Per la Domanda 6:

# Cambiamenti nelle spese
nuovo_carburante_settimanale = carburante_settimanale * 1.05  # Aumento del 5%
nuova_assicurazione_mensile = assicurazione_mensile * 0.8  # Diminuzione del 20%
costo_auto = 40000

# Nuove spese totali
nuove_spese_totali = costo_auto + (nuovo_carburante_settimanale * settimane_lavorative) + (nuova_assicurazione_mensile * mesi_totali_allanno)

# Per mantenere lo stesso reddito netto, i nuovi ricavi dovrebbero essere:
nuovi_ricavi_totali = nuove_spese_totali + reddito_netto

# Questo si traduce in un aumento richiesto nelle tariffe settimanali:
tariffa_aggiuntiva_settimanale = (nuovi_ricavi_totali - ricavi_totali) / settimane_lavorative

print("Aumento richiesto nelle tariffe settimanali: $", tariffa_aggiuntiva_settimanale)

 

Parole finali

 

Questa esplorazione ha messo in luce le innovative applicazioni e le limitazioni innate di GPT-4, in particolare nel campo della scienza dei dati.

Sia che si tratti di affrontare problemi complessi di statistica e probabilità, di modellazione o di rispondere a domande di codifica, GPT-4 ha mostrato capacità promettenti.

Tuttavia, è essenziale ricordare che, sebbene GPT-4 fornisca uno strumento prezioso, la supervisione umana e la comprensione rimangono fondamentali per garantire risultati di qualità, specialmente nei calcoli matematici.

Questa esplorazione è solo l’inizio del viaggio di GPT-4, poiché continui progressi e affinamenti sono sempre all’orizzonte. Sam Altman, CEO di OpenAI, ha dichiarato che nel futuro modello (GPT-5), OpenAI ha intenzione di risolvere il problema dei calcoli inaccurati e del limite sul numero di richieste.

Continuate a rimanere curiosi, continuate ad esplorare e ricordate che l’unico limite al potenziale dell’IA è quello che noi stessi imponiamo.

    Nate Rosidi è un data scientist specializzato in strategia di prodotto. È anche un professore aggiunto che insegna analisi dei dati ed è il fondatore di StrataScratch, una piattaforma che aiuta i data scientist a prepararsi per i colloqui con domande di intervista reali delle migliori aziende. Potete contattarlo su Twitter: StrataScratch o LinkedIn.