Os índios Pima do Arizona e do México têm a maior prevalência de diabetes relatada em qualquer população do mundo. Um pequeno estudo foi realizado para analisar seus prontuários médicos para avaliar se é possível prever o início do diabetes com base em medidas de diagnóstico.

O conjunto de dados é baixado do Kaggle, onde todos os pacientes incluídos são mulheres com pelo menos 21 anos de idade da herança indígena Pima.

O objetivo deste projeto é construir um modelo preditivo de aprendizado de máquina para prever, com base em medições de diagnóstico, se um paciente tem diabetes. Este é um projeto de classificação binária (2 classes) com aprendizado supervisionado.

O Jupyter Notebook pode ser usado para seguir o processo abaixo.

Etapa 1: Importar bibliotecas relevantes

As bibliotecas padrão do Pandas e Numpy são importadas, juntamente com as bibliotecas de visualização do Matplotlib e Seaborn. Há também uma série de modelos e métricas de medição importados da biblioteca Scikit-Learn.

Etapa 2: Leia os dados, execute a Análise Exploratória de Dados (EDA)

Esportes, Saúde, Mundo

Use o Pandas para ler o arquivo csv “diabetes.csv”. Existem 768 observações com 8 recursos preditores médicos (entrada) e 1 variável de destino (saída 0 para “não” ou 1 para “sim”). Vamos verificar a distribuição da variável de destino:

df = pd.read_csv (‘diabetes.csv’)

print (df.Outcome.value_counts ())

df [‘Resultado’]. value_counts (). plot (‘bar’). set_title (‘Diabetes Outcome’)

Os 8 recursos preditores médicos são:

  • Gravidez: número de vezes em que está grávida
  • Glicose: concentração plasmática de glicose por 2 horas em um teste oral de tolerância à glicose
  • Pressão sanguínea: pressão arterial diastólica (mm Hg)
  • Espessura da pele: espessura da dobra cutânea tríceps (mm)
  • Insulina: insulina sérica de 2 horas (mu U / ml)
  • IMC: Índice de Massa Corporal (peso em kg / (altura em m) ²)
  • Função DiabetesPedigree: Função de pedigree sobre diabetes na influência genética e risco hereditário
  • Idade: Idade (anos)

Vamos visualizar a distribuição desses 8 recursos.

features = [‘Gravidez’, ‘Glicose’, ‘Pressão Sanguínea’, ‘Espessamento da Pele’, ‘Insulina’, ‘IMC’, ‘DiabetesPedigreeFunction’, ‘Idade’]

LINHAS, COLS = 2, 4

fig, ax = plt.subplots (ROWS, COLS, figsize = (18,8))

linha, col = 0, 0

para i, recurso em enumerar (recursos):

     se col == COLS – 1:

         linha + = 1

     col = i% de COLS

     df [feature] .hist (posições = 35, cor = ‘verde’, alfa = 0,5, ax = ax [linha, col]). set_title (feature)

Existem alguns zeros no conjunto de dados, o que afetará a precisão do treinamento. Eu escolhi substituí-los pelo valor mediano.

Substituir zeros por mediana é um processo de duas etapas: primeiro substitua zero por NaN, depois substitua NaN por mediana (porque NaN não influenciará a mediana)

Depois disso, podemos modificar os códigos para visualizar as posições relativas das 2 classes.

Etapa 3: Criar o conjunto de dados do recurso (X) e do destino (y)

As notações X e y são comumente usadas no Scikit-Learn. Também usei o Random Forest Classifier para verificar a importância dos recursos. “Glicose” e “IMC” são os recursos preditores médicos mais importantes.

X, y = df.drop (‘Resultado’, eixo = 1), df [‘Resultado’]

rfc = RandomForestClassifier (random_state = SEED, n_estimators = 100)

rfc_model = rfc.fit (X, y)

(pd.Series (rfc_model.feature_importances_, index = X.columns)

     maior (8)

     .plot (tipo = ‘barh’, figsize = [8,4])

     .invert_yaxis ())

plt.yticks (tamanho = 15)

plt.title (‘Principais recursos derivados da floresta aleatória’, tamanho = 20)

Etapa 4: Divida os dados na proporção 80:20 e execute a Seleção do modelo

Esportes, Saúde, Mundo

O código padrão para dividir dados para treinamento e teste:

de sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = .2, random_state = SEED)

Depois disso, vários códigos fazem uma avaliação do modelo de linha de base, enquanto explico o objetivo abaixo de 2 linhas de códigos:

model.fit (X_train, y_train) – usando os dados de entrada do treinamento e o valor alvo para ensinar o modelo. Após esse comando, o modelo aprenderá as ‘regras’ e o ‘conhecimento’ de diferenciar um paciente com diabetes e sem diabetes.

y_pred = model.predict (X_test) – o modelo treinado é usado para fazer previsões usando o X_test como entradas, e os resultados previstos são armazenados em y_pred. Depois disso, podemos comparar y_test (a realidade) com y_pred (previsão do modelo). Se o modelo tiver aprendido todo o “conhecimento”, o y_pred será 100% compatível com o y_test.

Abaixo 9 modelos foram avaliados:

  • Gaussian Naive Bayes
  • Bernoulli Naive Bayes
  • Bayes ingênuos multinomiais
  • Regressão logística
  • K vizinho mais próximo
  • Classificador da Árvore de Decisão
  • Classificador aleatório de floresta
  • Classificação de vetores de suporte (SVC)
  • SVC linear

As métricas de desempenho usadas na avaliação são:

  • Pontuação de precisão: proporção de previsões corretas em todo o conjunto de dados. Tenha cuidado quando a classe-alvo for desequilibrada, por exemplo, se um modelo predizer que ninguém tem Deficiência de Glicose-6-Fosfato Desidrogenase (G6PD), esse modelo inútil terá 95% de precisão.
  • Pontuação de precisão: proporção de previsões corretas em todos os casos diabéticos previstos.
  • Recall Score: proporção de previsões corretas em todos os casos reais de diabéticos.
  • Pontuação F1: equilíbrio otimizado entre Precision e Recall para destinos binários.
  • Área sob a curva ROC: pontuações de previsão da área sob a curva ROC (Receiver Operating Characteristic), que é uma relação entre a taxa positiva verdadeira e a taxa de falso positivo.
  • Perda de log: também conhecida como perda logística ou perda de entropia cruzada, definida como a probabilidade logarítmica negativa dos rótulos verdadeiros, dadas as previsões de um classificador probabilístico, e deve ser o mais baixo possível.

Resultados da avaliação:

Desempenho do modelo de linha de base

Com base no desempenho do F1-Score, esses três modelos parecem liderar: GaussianNB, LogisticRegression e RandomForest.

Etapa 5: otimizar o modelo: ajuste do hiperparâmetro

Na metodologia usual de ciência de dados, devo proceder para ajustar os hiperparâmetros dos três modelos principais. Mas, para fins de aprendizado, adicionei vários códigos para ajustar TODOS os modelos.

Depois de ajustar o limiar e outros hiperparâmetros, o F1-Score melhorou para todos os modelos. A métrica “Área sob a curva ROC” mostra que a regressão logística ficou um pouco para trás, deixando dois modelos principais à sua escolha.

Parece uma corrida pescoço a pescoço entre os dois modelos principais, e precisamos de um desempate. As métricas abaixo são Perda de log e Tempo decorrido, em que as pontuações devem ser as mais baixas possíveis.

A Random Forest consome muito tempo para ser executada e, portanto, o Gaussian Naive Bayes é o modelo vencedor! Aqui estão as pontuações das métricas de desempenho após o ajuste de hiperparâmetros; aqueles em verde mostram melhorias:

Desempenho do modelo após o ajuste de hiperparâmetros (verde = aprimoramento realizado)

Resultados finais

A relevância deste projeto de classificação NÃO é classificar incorretamente um paciente diabético como normal, portanto, o foco deve estar na métrica “Recall”. O modelo gaussiano Naive Bayes se saiu muito bem (0,909).

Esportes, Saúde, Mundo

Possíveis limitações

Os resultados podem ser limitados ao tempo em que os dados foram coletados (entre as décadas de 1960 e 1980). Os procedimentos médicos modernos para o diagnóstico de diabetes incluem um teste de urina e o teste de hemoglobina A1c.

O conjunto de dados é bastante pequeno (768 linhas) e limitado aos índios Pima, mas fornece um bom começo na previsão de diabetes usando medidas de diagnóstico.

Conclusão

Neste projeto, o modelo gaussiano Naive Bayes alcançou uma pontuação de previsão (Recall) de 0,909, ou seja, de todos os pacientes diabéticos, 90,9% deles serão classificados corretamente usando medidas de diagnóstico médico.

“Glicose” e “IMC” são os recursos preditores médicos mais importantes.

Para uma vida saudável, cuide da sua ingestão de açúcar e do seu peso.

Desejo a todos uma vida saudável!