Construir um modelo preditivo usando Python

Conteúdo

Introdução

Eu descobri essa virtude estratégica de Sun Tzu recentemente:

6-princípios estratégicos-by-sun-tzu-13-728

O que isso tem a ver com um blog de ciência de dados? Esta é a essência de como as competições são ganhas e hackatones. Você vem para a competição melhor preparado do que os concorrentes, você corre rápido, você aprende e itera para obter o melhor de você.

A semana passada, Publicamos “Maneira perfeita de construir um modelo preditivo em menos de 10 minutos usando R”. Qualquer um pode adivinhar um seguimento rápido a esta postagem. Dado o surgimento do Python nos últimos anos e sua simplicidade, faz sentido ter este kit de ferramentas pronto para Pythonists no mundo da ciência de dados. Vou seguir uma estrutura semelhante à do post anterior com minhas contribuições adicionais em diferentes etapas da construção do modelo. Essas duas postagens irão ajudá-lo a construir seu primeiro modelo preditivo mais rápido e com melhor poder. A maioria dos melhores cientistas de dados e Kagglers constrói seu primeiro modelo eficiente rapidamente e o envia. Isso não só os ajuda a ter uma vantagem no quadro de líderes, mas também fornece uma solução de referência para superar.

modelagem preditiva em python em 10 minutos

Repartição do procedimento de modelagem preditiva

Sempre me concentro em investir tempo de qualidade durante a fase inicial de construção do modelo, como geração de hipótese / sessões de brainstorming / discussão (s) ou compreensão de domínio. Todas essas atividades me ajudam a me relacionar com o problema, o que eventualmente me leva a projetar soluções de negócios mais poderosas. Existem boas razões pelas quais você deve gastar esse tempo no início:

  1. Você tem tempo suficiente para investir e está renovado (tem impacto)
  2. Não é tendencioso com outros pontos de dados ou pensamentos (Eu sempre sugiro que você gere hipóteses antes de se aprofundar nos dados)
  3. Num estado mais avançado, estaria com pressa para concluir o projeto e não seria capaz de dedicar um tempo de qualidade.

Esta etapa exigirá tempo de qualidade, então eu não estou mencionando a linha do tempo aqui, Eu recomendo que você faça isso como uma prática padrão. Isso o ajudará a construir melhores modelos preditivos e resultará em menos iteração de trabalho em estágios posteriores. Vejamos os estágios restantes na primeira construção do modelo com cronogramas:

  1. Análise descritiva dos dados: 50% do tempo
  2. Tratamento de dados (valor ausente e correção de outlier): 40% do tempo
  3. Modelagem de dados: 4% do tempo
  4. Estimativa de desempenho: 6% do tempo

PD: esta é a divisão do tempo dedicado apenas à primeira construção do modelo

Vamos seguir o procedimento passo a passo (com estimativas do tempo gasto em cada etapa):

Estágio 1: Análise descritiva / Exploração de dados:

Nos meus primeiros dias como cientista de dados, a exploração de dados costumava levar muito tempo. Com o tempo, Automatizei muitas operações com os dados. Uma vez que a preparação de dados ocupa o 50% do trabalho na construção de um primeiro modelo, os benefícios da automação são óbvios. Você pode verificar o “7 etapas de exploração de dados” para ver as operações de exploração de dados mais comuns.

Tavish já mencionou em sua postagem que com ferramentas avançadas de aprendizado de máquina em execução, o tempo necessário para realizar esta tarefa foi significativamente reduzido. Uma vez que este é o nosso primeiro modelo de referência, eliminamos qualquer tipo de engenharia de função. Por isso, o tempo que pode levar para realizar uma análise descritiva é restrito para descobrir valores ausentes e grandes recursos que são diretamente visíveis. Na minha metodologia, precisa de 2 minutos para completar esta etapa (Suposição, 100.000 observações no conjunto de dados).

As operações que realizo para o meu primeiro modelo incluem:

  1. Identifique as características de identificação, entrada e destino
  2. Identifique características categóricas e numéricas
  3. Identifique colunas com valores ausentes

Estágio 2: Tratamento de dados (tratamento de valores faltantes):

Existem várias alternativas para enfrentá-lo. Para o nosso primeiro modelo, vamos nos concentrar nas técnicas inteligentes e rápidas para construir seu primeiro modelo eficaz (estes já foram discutidos por Tavish em sua postagem, Estou adicionando alguns métodos)

  • Crie indicadores fictícios para valores ausentes: funciona, às vezes, os próprios valores ausentes contêm uma boa quantidade de informações.
  • Imputa o valor ausente com a média / mediana / qualquer outro método mais simples: imputação de média e mediana funciona bem, a maioria das pessoas prefere imputar com o valor médio, mas em caso de distribuição enviesada, Eu sugiro que você escolha a mediana. Outros métodos inteligentes são imputar valores por meio de casos semelhantes e imputação mediana usando outras características relevantes ou construindo um modelo. Como um exemplo: no desafio de sobrevivência do Titanic, Você pode imputar os valores de Idade ausentes usando a saudação do nome do passageiro como “Sr.”, “Perder”, “Em.”, “Maestro” e outros, e isso mostrou um bom impacto no desempenho do modelo. .
  • Imputar el valor faltante de la variável categórica: crie um novo nível para imputar a variável categórica de forma que todos os valores ausentes sejam codificados como um único valor, diga “New_Cat” Ou você pode olhar para a combinação de frequências e imputar o valor ausente com o valor que possui uma frequência mais alta..

Com esses métodos simples de processamento de dados, pode reduzir o tempo de processamento de dados para 3-4 minutos.

Estágio 3. Modelagem de dados:

Eu recomendo usar qualquer uma das técnicas de GBM / Floresta Aleatória, dependendo do problema de negócios. Essas duas técnicas são extremamente eficazes na criação de uma solução de referência.. Tenho visto cientistas de dados usarem esses dois métodos frequentemente como seu primeiro modelo e, em alguns casos, também atua como um modelo final. Isso levará o máximo de tempo (~ 4-5 minutos).

Estágio 4. Estimativa de desempenho:

Existem vários métodos para validar o desempenho do seu modelo, Eu sugiro que você divida seu conjunto de dados de trem em Trem e valide (idealmente 70:30) e criar um modelo baseado no 70% do conjunto de dados do trem. Agora, realizar uma validação cruzada usando o 30% do conjunto de dados validado e avaliar o desempenho usando a métrica de avaliação. Esta conclusão leva 1-2 minutos executar e documentar.

A intenção deste post não é vencer a competição, mas para determinar um benchmark para nós mesmos. Vejamos os códigos Python para realizar as etapas acima e construir seu primeiro modelo com o maior impacto.

Vamos começar a colocar isso em ação

Presumo que você tenha feito toda a geração de hipóteses primeiro e seja bom com ciência de dados básica usando Python. Estou ilustrando isso com um exemplo de desafio de ciência de dados. Vamos ver a estrutura:

Paso 1 : Importe las bibliotecas imprescindibles y lea el conjunto de datos de prueba y Treinamento. 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
trem=pd.read_csv('C:/Usuários/DataPeaker/Desktop/desafio/Trem.csv')
teste=pd.read_csv('C:/Usuários/DataPeaker/Desktop/desafio/Teste.csv')
Comboio['Tipo']='Train' #Create a flag for Train and Test Data set
test['Tipo']='Test'
fullData = pd.concat([Comboio,teste],eixo = 0) #Conjunto combinado de dados de trem e teste

Paso 2: A ideia é extrair a data da primeira coluna da linha superior em um valor escalar para que você possa usá-lo mais tarde 2 del marco no es necesario en Python. Pasamos al siguiente paso.

Paso 3: Ver los nombres de columna / retomar del conjunto de datos

fullData.colunas # This will show all the column names
fullData.head(10) # Mostrar primeiro 10 records of dataframe
fullData.describe() #Você pode ver o resumo dos campos numéricos usando descreva() função

Capture_10

Paso 4: Identifique o a) Variáveis ​​de identificação b) Variáveis ​​alvo c) Variáveis ​​categóricas d) Variables numéricas e) Outras variáveis

ID_col = ['REF_NO']
target_col = ["Status da Conta"]
cat_cols = ['crianças','age_band','status','ocupação','occupation_partner','home_status','renda familiar','trabalhadores por conta própria', 'self_employed_partner','year_last_moved','TELEVISÃO','post_code','post_area','Gênero sexual','região']
num_cols = list(definir(Lista(fullData.colunas))-definir(cat_cols)-definir(ID_col)-definir(target_col)-definir(data_col))
other_col =['Tipo'] #Identificador do conjunto de dados de teste e treinamento

Paso 5 : Identifique as variáveis ​​com valores ausentes e crie um sinalizador para elas

fullData.isnull().qualquer()#Retornará o recurso com Verdadeiro ou Falso,Verdadeiro significa que falta valor, senão Falso
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 bandeira faltando valor com 1 e outros com 0

para o VAR em num_cat_cols:
    se fullData[Onde].é nulo().qualquer()==Verdade:
        fullData[var+'_NA']=fullData[Onde].é nulo()*1 

Paso 6 : Imputar valores perdidos

#Impute numerical missing values with mean
fullData[num_cols] = fullData[num_cols].Fillna(fullData[num_cols].quer dizer(),inplace = True)
#Imputar valores categoricaes faltando com -9999
fullData[cat_cols] = fullData[cat_cols].Fillna(valor = -9999)

Paso 7 : Cree codificadores de etiqueta para variáveis 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:
 número = LabelEncoder()
 fullData[Onde] number.fit_transform(fullData[Onde].astype('str'))

#Target variable is also a categorical so convert it
fullData["Status da Conta"] number.fit_transform(fullData["Status da Conta"].astype('str'))

train=fullData[fullData['Tipo']=='Trem']
test=fullData[fullData['Tipo']=='Teste']

Comboio['is_train'] = np.random.uniform(0, 1, len(Comboio)) <= .75
Trem, Validar = trem[Comboio['is_train']==Verdade], Comboio[Comboio['is_train']==Falso]

Paso 8 : Passe as variáveis imputadas e fictícias (indicadores de valores perdidos) ao procedimento de modelagem. Estou usando uma floresta aleatória para prever a classe..

características=lista(definir(Lista(fullData.colunas))-definir(ID_col)-definir(target_col)-definir(other_col))
x_train = Trem[Lista(recursos)].values
y_train = Train["Status da Conta"].values
x_validate = Validate[Lista(recursos)].values
y_validate = Validate["Status da Conta"].values
x_test=test[Lista(recursos)].valores
random.seed(100)
rf = RandomForestClassifier(n_estimators=1000)
rf.fit(x_train, y_train)

Paso 9 : Verifique o desempenho e faça previsões

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

final_status = rf.predict_proba(x_test)
teste["Status da Conta"]=final_status[:,1]
test.to_csv('C:/Usuários/DataPeaker/Desktop/model_output.csv',colunas =['REF_NO','Conta.Status'])

E submeta-se!!

Notas finais

Com sorte, este post permitirá que você comece a criar seu próprio código de pontuação a partir de 10 minutos. A maioria dos professores de Kaggle e os melhores cientistas do nosso país hackatones Tenha esses códigos prontos e dispare sua primeira remessa antes de fazer uma análise detalhada. Uma vez que eles tenham uma estimativa do ponto de referência, eles começam a improvisar mais. Compartilhe seus códigos completos na caixa de comentários abaixo.

Esta postagem foi útil para você?? Compartilhe suas opiniões / pensamentos na seção de comentários abaixo.

Se você gostou do que acabou de ler e deseja continuar seu aprendizado sobre análise, inscreva-se em nossos e-mails, Siga-nos no Twitter ou como o nosso página do Facebook.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.