Introdução
Eu descobri essa virtude estratégica de Sun Tzu recentemente:
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.
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:
- Você tem tempo suficiente para investir e está renovado (tem impacto)
- Não é tendencioso com outros pontos de dados ou pensamentos (Eu sempre sugiro que você gere hipóteses antes de se aprofundar nos dados)
- 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:
- Análise descritiva dos dados: 50% do tempo
- Tratamento de dados (valor ausente e correção de outlier): 40% do tempo
- Modelagem de dados: 4% do tempo
- 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:
- Identifique as características de identificação, entrada e destino
- Identifique características categóricas e numéricas
- 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 / medianaA mediana é uma medida estatística que representa o valor central de um conjunto de dados ordenados. Para calculá-lo, Os dados são organizados do menor para o maior e o número no meio é identificado. Se houver um número par de observações, Os dois valores principais são calculados em média. Este indicador é especialmente útil em distribuições assimétricas, uma vez que não é afetado por valores extremos.... / 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ávelEm estatística e matemática, uma "variável" é um símbolo que representa um valor que pode mudar ou variar. Existem diferentes tipos de variáveis, e qualitativo, que descrevem características não numéricas, e quantitativo, representando quantidades numéricas. Variáveis são fundamentais em experimentos e estudos, uma vez que permitem a análise de relações e padrões entre diferentes elementos, facilitando a compreensão de fenômenos complexos.... Categórico: 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 TreinamentoO treinamento é um processo sistemático projetado para melhorar as habilidades, Conhecimento ou habilidades físicas. É aplicado em várias áreas, como esporte, Educação e desenvolvimento profissional. Um programa de treinamento eficaz inclui planejamento de metas, prática regular e avaliação do progresso. A adaptação às necessidades individuais e a motivação são fatores-chave para alcançar resultados bem-sucedidos e sustentáveis em qualquer disciplina..... 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
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
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.