Uma análise feita com Support Vector Machine
Fonte: Robina Weermeijer on Unsplash
A análise a seguir se refere ao Stroke Prediction Dataset, um dataset público que reúne informações clinicas de pacientes e se eles sofreram ou não um derrame. Download feito no site https://www.kaggle.com/fedesoriano/stroke-prediction-dataset. Utilizou-se o método de machine learning – Support Vector Machine (SVM) feito na linguagem de programação python para a análise do dataset.
O dataset contém pouco mais de 5000 observações, desde dados clínicos como se o paciente tem hipertensão até dados sociodemográficos como idade e se mora no interior ou na cidade. O dataset reúne todas essas features e no final registra se o paciente teve ou não um derrame.
O objetivo é fazer um modelo classificatório com Support Vector Machine para prever se uma pessoa pode ter um derrame no futuro.
Nós temos 11 features:
1) id: identificação 2) gender: "Male", "Female" or "Other" 3) age: idade do paciente 4) hypertension: 0 se não tem hipertensão, 1 se tem hipertensão 5) heart_disease: 0 se tem não doença cardiaca, 1 se tem doença cardiaca 6) ever_married: "No" or "Yes" 7) work_type: "children", "Govt_jov", "Never_worked", "Private" or "Self-employed" 8) Residence_type: "Rural" or "Urban" 9) avg_glucose_level: media de glucose no sangue 10) bmi: indice de massa corpórea 11) smoking_status: "formerly smoked", "never smoked", "smokes" or "Unknown"*
E o target:
1) stroke: 1 se teve derrame or 0 se não teve derrame
Tabela 1 - Dataset
Fonte: O Autor
Na tabela 1, vemos todas as features e o target na última coluna. Também é possível observar linhas com dados “NaN” que serão removidos para a análise.
Figura 1 - Histograma 'age'
Fonte: O autor
A figura 1 mostra o histograma da idade dos pacientes e revela que a maior parte deles encontra-se entre 40 e 60 anos. A média de idade é de 42,9 anos.
Figura 2 - Gráfico de barras do gênero
Fonte: O autor
Pela figura 2, temos que as mulheres são maioria nesse dataset.
Figura 3 - Boxplot de age e stroke com hue=gender
Fonte: O autor
Figura 4 - Boxplot de age e stroke com hue=hypertension
Fonte: O autor
Figura 5 - Boxplot de age e stroke com hue=heart_disease
Fonte: O autor
Figura 6 - Boxplot de age e stroke com hue=smoking_status
Fonte: O autor
Para verificar a idade influencia nos casos de derrame diferentemente em homens e mulheres, temos a figura 3. Nela, é mostrado que mulheres começam a ter derrames mais cedo que homens, aproximadamente 5 anos mais cedo.
A hipertensão, nesse caso, começa a aparecer a partir dos 40 anos e não demonstra ser um agravante quando comparado com o outro grupo que teve derrame, mas não tem hipertensão, como visto na figura 4. Já na figura 5, vemos que a presença de doenças do coração afeta principalmente as pessoas mais idosas e, nelas, temos casos de derrame. Na figura 6, temos a confirmação que fumar tem relação com derrame. Visto em verde no gráfico, quem fuma pode ter derrame a partir de 36 anos e de quem não fuma e quem era fumante com, aproximadamente 43 anos e 50 anos, respectivamente.
Figura 7 - Boxplot de age e stroke com hue=work_type
Fonte: O autor
O tipo de trabalho, em empresas privadas ou autônomos, por exemplo, também se mostram relevantes em futuros casos de derrame. Na figura 7, temos que os casos de derrame começam a aparecer com 30 anos para quem trabalha em empresas privadas, diferentemente de quem é autônomo que começam a ter casos de derrame com quase 50 anos.
Figura 8 - Boxplot de age e stroke com hue=Residence_type
Fonte: O autor
A figura 8 mostra que quem mora em zona rural pode ter derrame mais cedo, mas a diferença é pouca comparada com quem mora em áreas urbanas.
Figura 9 - Boxplot de age e stroke com hue=avg_glucose_level
Fonte: O autor
Os níveis de glucose no sangue contribuem para ter um derrame, como visto na figura 9. A partir de 126 mg/dL ou mais é considerado que a pessoa tem diabetes e quase mais da metade dos pacientes são diabéticos. Portanto, temos que diabetes é um fator de risco para casos de derrame.
Após a análise exploratória, foi feito um modelo classificatório para prever se uma pessoa vai ter ou não um derrame, baseados em todas as features vistas na tabela 1. Foi usado o modelo de Support vector machine, pois ele tem se demonstrado eficaz para esse tipo de problema.
Tabela 2 – Dados com dummies
Fonte: O autor
O primeiro passo foi substituir os dados categóricos, como gender e work_type, por dummies, a fim de termos melhores resultados com o algoritmo. Em seguida foi retirada a coluna id, porque não são relevantes para a análise. Na tabela 2 vemos essas mudanças.
Em seguida foram separados os inputs e o target e foi feita uma verificação do balanceamento do dataset.
Figura 10 - Casos de No stroke e stroke
Fonte: O Autor
Pela figura 10, vemos que o dataset está desbalanceado e, portanto, pode afetar a performance do modelo. Então, foi feito o balanceamento desse dataset com duas técnicas, SMOTE e RandomUnderSampler com pipeline para obter o melhor resultado.
Foram feitos dois modelos, um com os inputs inalterados e outro com os inputs normalizados para verificar se há melhora nos resultados.
Figura 11 - Accuracy Score
Fonte: O autor
Figura 12 - Precision e Recall
Fonte: O autor
Como visto na figura 11, com a normalização dos inputs, tivemos um aumento de 15 pontos percentuais no accuracy score e, também, um bom aumento nas métricas de Precison e Recall, as quais são muito importantes num caso de classificação de casos de derrame, pois a presença de falsos-negativos (recall) afeta diremente as pessoas a vida das pessoas.
Todo o código pode ser encontrado no meu github:
コメント