Creare un modello predittivo con PythonBuild a predictive model using Python

Contenuti

introduzione

Me encontré con esta virtud estratégica de Sun Tzu recientemente:

6-principios-estrategicos-por-sun-tzu-13-728

Cosa ha a che fare questo con un blog di data science?? Esta es la esencia de cómo se ganan competiciones y hackatones. Llegas a la competencia mejor preparado que los competidores, ejecutas rápidamente, aprendes e iteras para sacar lo mejor de ti.

La settimana scorsa, publicamos “Manera perfecta de construir un modelo predictivo en menos de 10 minutos usando R”. Cualquiera puede adivinar un seguimiento rápido de este post. Dado el auge de Python en los últimos años y su simplicidad, tiene sentido tener este kit de herramientas listo para los Pythonistas en el mundo de la ciencia de datos. Seguiré una estructura semejante a la del post anterior con mis aportes adicionales en diferentes etapas de la construcción del modelo. 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 / discusión (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. Hay buenas razones por las que debería dedicar este tiempo al principio:

  1. Tienes tiempo suficiente para invertir y estás fresco (tiene impacto)
  2. No está sesgado con otros puntos de datos o pensamientos (siempre sugiero que genere hipótesis antes de profundizar en los datos)
  3. En una etapa posterior, tendría prisa por completar el proyecto y no podría dedicar tiempo de calidad.

Esta etapa necesitará un tiempo de calidad, por lo que no estoy mencionando la línea de tiempo aquí, le recomendaría que la haga como una práctica estándar. Le ayudará a construir mejores modelos predictivos y dará como consecuencia una menor iteración del trabajo en etapas posteriores. Veamos las etapas restantes en la primera compilación del modelo con líneas de tiempo:

  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: esta es la división del tiempo dedicado solo a la primera construcción del modelo

Repasemos el procedimiento paso a paso (con estimaciones del tiempo invertido en cada paso):

Palcoscenico 1: Analisi descrittiva / Esplorazione dei dati:

En mis primeros días como científico de datos, la exploración de datos solía llevarme mucho tiempo. Col tempo, he automatizado muchas operaciones con los datos. Dado que la preparación de datos ocupa el 50% del trabajo en la construcción de un primer modelo, los beneficios de la automatización son obvios. Puede consultar los “7 pasos de la exploración de datospara ver las operaciones más comunes de exploración de datos.

Tavish ya ha mencionado en su post que con las herramientas avanzadas de aprendizaje automático en carrera, el tiempo necesario para realizar esta tarea se ha reducido significativamente. Dado que este es nuestro primer modelo de referencia, eliminamos cualquier tipo de ingeniería de funciones. 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 (Supuesto, 100.000 observaciones en el conjunto de datos).

Las operaciones que realizo para mi primer modelo incluyen:

  1. Identificar características de identificación, entrada y destino
  2. Identificar características categóricas y numéricas
  3. Identificar columnas con valores perdidos

Palcoscenico 2: Elaborazione dati (tratamiento de valores perdidos):

Hay varias alternativas para afrontarlo. Para nuestro primer modelo, nos centraremos en las técnicas inteligentes y rápidas para construir su primer modelo efectivo (estas ya fueron discutidas por Tavish en su post, estoy agregando algunos métodos)

  • Crear indicadores ficticios para los valores faltantes: Funziona, a veces los valores faltantes en sí contienen una buena cantidad de información.
  • Imputar el valor faltante con media / mediano / cualquier otro método más sencillo: la imputación de la media y la mediana funciona bien, la mayoría de las personas prefieren imputar con el valor medio, pero en caso de distribución sesgada, le sugiero que elija la mediana. Otros métodos inteligentes están imputando valores por medio de casos similares y la imputación mediana usando otras características relevantes o construyendo un modelo. Come esempio: en el desafío de supervivencia del Titanic, puede imputar los valores faltantes de Edad usando el saludo del nombre de los pasajeros comoSr.”, “Señorita”, “Sra.”, “Maestro” e altri, y esto ha demostrado un buen impacto en el rendimiento del modelo. .
  • Imputar el valor faltante de la variabile categórica: cree un nuevo nivel para imputar la variable categórica de modo que todo el valor faltante se codifique como un valor único, Dillo “New_Cato puede mirar la combinación de frecuencias e imputar el valor faltante con el valor que dispone de una frecuencia más 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:

Recomiendo utilizar cualquiera de las técnicas de GBM / Foresta casuale, dependiendo del problema comercial. Estas dos técnicas son extremadamente efectivas para crear una solución de referencia. He visto que los científicos de datos usan estos dos métodos a menudo como su primer modelo y, in alcuni casi, además actúa como modelo final. Questa operazione richiederà la massima quantità di tempo (~ 4-5 minuti).

Palcoscenico 4. Stima delle prestazioni:

Existen varios métodos para validar el rendimiento de su modelo, 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) #Combined both Train and Test Data set

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) # Show first 10 records of dataframe
fullData.describe() #You can look at summary of numerical fields by using 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 = ['figli','age_band','status','occupation','occupation_partner','home_status','family_income','self_employed', 'self_employed_partner','year_last_moved','TVarea','post_code','post_area','Genere',«regione»]
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 means have missing value else 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 
# and flag missing value with 1 and other with 0

for var in num_cat_cols:
    if 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)
#Impute categorical missing values with -9999
fullData[cat_cols] = fullData[cat_cols].riempire(valore = -9999)

passo 7 : Cree codificadores de etiquetas para variables categóricas y divida el conjunto de datos para entrenar y probar, divida aún más el conjunto de datos del tren para entrenar y validar

#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 : Compruebe 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.