Creare un modello predittivo con PythonBuild a predictive model using Python

Contenuti

introduzione

Mi sono imbattuto recentemente in questa virtù strategica di Sun Tzu:

6-principi-strategici-di-Sun-Tzu-13-728

Cosa ha a che fare questo con un blog di data science?? Questa è l'essenza di come si vincono le competizioni e hackatones. Arrivi alla competizione meglio preparato rispetto ai concorrenti, esegui rapidamente, impari e iteri per dare il meglio di te.

La settimana scorsa, abbiamo pubblicato 'Modo perfetto per costruire un modello predittivo in meno di 10 minuti usando R'. Chiunque può fare una rapida previsione seguendo questo post. Dato il boom di Python negli ultimi anni e la sua semplicità, ha senso avere questo kit di strumenti pronto per i Pythonisti nel mondo della scienza dei dati. Seguirò una struttura simile a quella del post precedente con i miei contributi aggiuntivi nelle diverse fasi della costruzione del modello. Estos dos posts le ayudarán a construir su primer modelo predictivo más rápido y con mejor potencia. La mayoría de los mejores científicos de datos y Kagglers construyen su primer modelo eficaz rápidamente y lo envían. Esto no solo les ayuda a tener una ventaja en la tabla de líderes, sino que además les proporciona una solución de referencia para superar.

modelado predictivo en python en 10 minuti

Ripartizione della procedura di modellazione predittiva

Siempre me concentro en invertir tiempo de calidad durante la etapa inicial de la construcción del modelo, como la generación de hipótesis / sesiones de lluvia de ideas / discussion (S) o la comprensión del dominio. Todas estas actividades me ayudan a relacionarme con el problema, lo que eventualmente me lleva a diseñar soluciones comerciales más poderosas. Ci sono buone ragioni per cui dovresti dedicare questo tempo all'inizio:

  1. Hai abbastanza tempo da investire e sei fresco (Ha impatto)
  2. Non è influenzato da altri punti dati o pensieri (Suggerisco sempre di formulare ipotesi prima di approfondire i dati)
  3. In una fase successiva, Sarebbe di fretta per completare il progetto e non potrebbe dedicare tempo di qualità.

Questa fase richiederà tempo di qualità, quindi non sto menzionando la tempistica qui, Le consiglierei di farlo come prassi standard. Ti aiuterà a costruire modelli predittivi migliori e porterà come conseguenza meno iterazioni di lavoro nelle fasi successive. Vediamo le fasi rimanenti nella prima costruzione del modello con le linee temporali:

  1. Analisi descrittiva dei dati: 50% tempo metereologico
  2. Elaborazione dati (Valore perso e correzione dei valori anomali): 40% tempo metereologico
  3. Modellazione dei dati: 4% tempo metereologico
  4. Stima delle prestazioni: 6% tempo metereologico

PD: questa è la suddivisione del tempo dedicato solo alla prima costruzione del modello

Ripassiamo la procedura passo dopo passo (con stime del tempo impiegato in ciascun passaggio):

Palcoscenico 1: Analisi descrittiva / Esplorazione dei dati:

Nei miei primi giorni come data scientist, l'esplorazione dei dati mi portava molto tempo. Col tempo, ho automatizzato molte operazioni sui dati. Poiché la preparazione dei dati occupa la 50% del lavoro nella costruzione di un primo modello, i benefici dell'automazione sono evidenti. Puoi consultare i “7 passaggi dell'esplorazione dei dati” per vedere le operazioni di esplorazione dei dati più comuni.

Tavish ha già menzionato nel suo post che con gli strumenti avanzati di apprendimento automatico in corso, il tempo necessario per completare questo compito si è ridotto significativamente. Poiché questo è il nostro primo modello di riferimento, eliminiamo qualsiasi tipo di ingegneria delle caratteristiche. Perché, Il tempo necessario per eseguire un'analisi descrittiva è limitato alla conoscenza dei valori mancanti e delle grandi caratteristiche direttamente visibili. Nella mia metodologia, Bisogno 2 minuti Per completare questo passaggio (Ipotesi, 100.000 osservazioni nel set di dati).

Le operazioni che eseguo per il mio primo modello includono:

  1. Identificare le caratteristiche identificative, input e destinazione
  2. Identificare caratteristiche categoriali e numeriche
  3. Identificare le colonne con valori mancanti

Palcoscenico 2: Elaborazione dati (trattamento dei valori mancanti):

Ci sono diverse alternative per affrontarlo. Per il nostro primo modello, ci concentreremo sulle tecniche intelligenti e veloci per costruire il nostro primo modello efficace (queste sono già state discusse da Tavish nel suo post, sto aggiungendo alcuni metodi)

  • Creare indicatori fittizi per i valori mancanti: Funziona, a volte i valori mancanti di per sé contengono una buona quantità di informazioni.
  • Imputare il valore mancante con la media / mediano / qualsiasi altro metodo più semplice: l'imputazione con la media e la mediana funziona bene, la maggior parte delle persone preferisce imputare con il valore medio, ma in caso di distribuzione asimmetrica, le suggerisco di scegliere la mediana. Altri metodi intelligenti consistono nell'imputare i valori attraverso casi simili e l'imputazione mediana usando altre caratteristiche rilevanti o costruendo un modello. Come esempio: nella sfida di sopravvivenza del Titanic, può imputare i valori mancanti di Età usando il titolo del nome dei passeggeri come “Signor”, “Signorina”, “Signora”, “Maestro” e altri, e questo ha dimostrato un buon impatto sulle prestazioni del modello. .
  • Imputare il valore mancante di variabile Categorico: creare un nuovo livello per imputare la variabile categorica in modo che tutti i valori mancanti siano codificati come un valore unico, Dillo “New_Cat” oppure si può guardare la combinazione delle frequenze e imputare il valore mancante con quello che ha la frequenza più alta.

Con metodi così semplici di elaborazione dei dati, può ridurre il tempo di elaborazione dei dati per 3-4 minuti.

Palcoscenico 3. Modellazione dei dati:

Consiglio di utilizzare una qualsiasi delle tecniche GBM / Foresta casuale, a seconda del problema aziendale. Queste due tecniche sono estremamente efficaci per creare una soluzione di riferimento. Ho visto che i data scientist usano spesso questi due metodi come loro primo modello e, in alcuni casi, oltre a ciò funge da modello finale. Questa operazione richiederà la massima quantità di tempo (~ 4-5 minuti).

Palcoscenico 4. Stima delle prestazioni:

Esistono diversi metodi per validare le prestazioni del proprio modello, le sugiero que divida el conjunto de datos de su tren en Train y valide (idealmente 70:30) y cree un modelo basado en el 70% del conjunto de datos del tren. Ora, realice una validación cruzada usando el 30% del conjunto de datos validados y evalúe el rendimiento usando la métrica de evaluación. Questo in conclusione prende 1-2 minuti Esecuzione e documento.

La intención de este post no es ganar la competencia, ma per determinare un punto di riferimento per noi stessi. Veamos los códigos de Python para realizar los pasos anteriores y construir su primer modelo con mayor impacto.

Iniziamo a metterlo in pratica

Supuse que primero ha realizado toda la generación de hipótesis y es bueno con la ciencia de datos básica usando Python. Estoy ilustrando esto con un ejemplo de desafío de ciencia de datos. Veamos la estructura:

passo 1 : Importe las bibliotecas imprescindibles y lea el conjunto de datos de prueba y addestramento. Adjunte ambos.

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
import random
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
train=pd.read_csv('C:/Users/DataPeaker/Desktop/challenge/Train.csv')
test=pd.read_csv('C:/Users/DataPeaker/Desktop/challenge/Test.csv')
treno['Type']='Train' #Create a flag for Train and Test Data set
test['Type']='Test'
fullData = pd.concat([treno,test],asse=0) #Combinato sia Train che Test Set di dati

passo 2: El paso 2 del marco no es necesario en Python. Pasamos al siguiente paso.

passo 3: Visualizzare i nomi delle colonne / Riepilogo del set di dati

fullData.columns # This will show all the column names
fullData.head(10) # Mostra prima 10 records of dataframe
fullData.describe() #Puoi guardare il riepilogo dei campi numerici usando describe() funzione

Capture_10

passo 4: Identificar las a) Variables de identificación b) Variables objetivo c) Variables categóricas d) Variables numéricas e) Otras variables

ID_col = ['REF_NO']
target_col = ["Account.Status"]
cat_cols = ['children','age_band','status','occupation','occupation_partner','home_status','family_income','self_employed', 'self_employed_partner','year_last_moved','TVarea','post_code','post_area','genere','region']
num_cols= list(set(elenco(fullData.columns))-set(cat_cols)-set(ID_col)-set(target_col)-set(data_col))
other_col=['Type'] #Test and Train Data set identifier

passo 5 : Identifique las variables con valores perdidos y cree una bandera para esas

fullData.isnull().qualunque()#Will return the feature with True or False,True significa avere un valore mancante, altrimenti False
Capture11
num_cat_cols = num_cols+cat_cols # Combined numerical and Categorical variables

#Create a new variable for each variable having missing value with VariableName_NA 
# e segnala il valore mancante con 1 e l'altro con 0

per var in num_cat_cols:
    se fullData[dove].è zero().qualunque()==True:
        fullData[var+'_NA']=fullData[dove].è zero()*1 

passo 6 : Imputare i valori persi

#Impute numerical missing values with mean
fullData[num_cols] = fullData[num_cols].riempire(fullData[num_cols].Significare(),inplace=Vero)
#Sostituisci i valori categoriali mancanti con -9999
fullData[cat_cols] = fullData[cat_cols].riempire(valore = -9999)

passo 7 : Crea codificatori di etichette per variabili categoriali e dividi il dataset per addestrare e testare, dividi ulteriormente il dataset di addestramento per addestrare e validare

#create label encoders for categorical features
for var in cat_cols:
 number = LabelEncoder()
 fullData[dove] = number.fit_transform(fullData[dove].come tipo('str'))

#Target variable is also a categorical so convert it
fullData["Account.Status"] = number.fit_transform(fullData["Account.Status"].come tipo('str'))

train=fullData[fullData['Type']=='Train']
test=fullData[fullData['Type']=='Test']

treno['is_train'] = np.random.uniform(0, 1, len(treno)) <= .75
Treno, Validate = train[treno['is_train']==True], treno[treno['is_train']==False]

passo 8 : Pase las variables imputadas y ficticias (indicadores de valores perdidos) al procedimiento de modelado. Estoy usando un bosque aleatorio para predecir la clase.

features=list(set(elenco(fullData.columns))-set(ID_col)-set(target_col)-set(other_col))
x_train = Train[elenco(caratteristiche)].values
y_train = Train["Account.Status"].values
x_validate = Validate[elenco(caratteristiche)].values
y_validate = Validate["Account.Status"].values
x_test=test[elenco(caratteristiche)].valori
random.seed(100)
rf = RandomForestClassifier(n_estimators=1000)
rf.fit(x_treno, y_train)

passo 9 : Verifique el rendimiento y haga predicciones

status = rf.predict_proba(x_validate)
fpr, Tpr, _ = roc_curve(y_validate, status[:,1])
roc_auc = auc(fpr, Tpr)
print roc_auc

final_status = rf.predict_proba(x_test)
test["Account.Status"]=final_status[:,1]
test.to_csv('C:/Users/DataPeaker/Desktop/model_output.csv',colonne=['REF_NO','Account.Status'])

E invia!!

Note finali

Auspicabilmente, este post le permitirá comenzar a crear su propio código de puntuación de 10 minuti. La mayoría de los maestros de Kaggle y los mejores científicos de nuestra hackatones Tenga estos códigos listos y dispare su primer envío antes de realizar un análisis detallado. Una volta che hanno una stima del benchmark, Iniziano a improvvisare di più. Condividi i tuoi codici completi nella casella dei commenti qui sotto.

Questo post è stato utile?? Condividi le tue opinioni / pensieri nella sezione commenti qui sotto.

Se ti piace quello che hai appena letto e vuoi continuare a imparare l'analisi, iscriviti alle nostre email, Seguici su Twitter o come il nostro pagina Facebook.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.

Altoparlante dati