1. Problema de Negócio

Muito tem sido dito durante os últimos anos sobre como a medicina de precisão e, mais concretamente, como o teste genético, vai provocar disrupção no tratamento de doenças como o câncer.

Mas isso ainda está acontecendo apenas parcialmente devido à enorme quantidade de trabalho manual ainda necessário. Neste projeto, tentaremos levar a medicina personalizada ao seu potencial máximo. Uma vez sequenciado, um tumor cancerígeno pode ter milhares de mutações genéticas. O desafio é distinguir as mutações que contribuem para o crescimento do tumor das mutações.

Atualmente, esta interpretação de mutações genéticas está sendo feita manualmente. Esta é uma tarefa muito demorada, onde um patologista clínico tem que revisar manualmente e classificar cada mutação genética com base em evidências da literatura clínica baseada em texto.

Para este projeto, o MSKCC (Memorial Sloan Kettering Cancer Center) está disponibilizando uma base de conhecimento anotada por especialistas, onde pesquisadores e oncologistas de nível mundial anotaram manualmente milhares de mutações.

Dataset: https://www.kaggle.com/c/msk-redefining-cancer-treatment/overview

-- Objetivos
    - Atingir 65% de precisão.
    - Log Loss menor que 1.0 .

2. Imports

2.1 Ambiente

3. Carregamento dos Dados

4. Analise Exploratoria

É analisado que possuimos valores missing para a coluna 'Text' para uma melhor generalização, e não descartar os dados iremos fazer que os dados missing sejam preenchidos pelo valor de 'Gene' + 'Variation'.

É interessante notar que possuimos 264 'Gene' diferentes e 2996 'Variation', também possuimos 1920 'Text'. Considerando que temos 3321 observações, o numero de 'Variation' unicas é muito alto, podendo prejudicar o modelo.

4.1 Analise Univariavel

Algumas classes como 3, 9 e 8 possuimos muitos poucos dados, o que pode gerar um problema no aprendizado do nosso modelo. Induzindo a determinados víes. Um balanceamento pode auxiliar.

Para melhor entendimento dos dados é interessante analisar o acumulo do numero de genes ao longo da sua distribuição, de forma não cumulativa e cumulativa. Já no segundo grafico mais uma vez é perceptivel que o grafico tende a crescer mais rapidamente no inicio, tendendo a uma forma exponencial.

No primeiro grafico é perceptivel que muitos 'Genes' concentram uma maior taxa de ocorrencia, o que tende a cair rapidamente em relação aos outros.

Analisando abaixo é perceptivel que os 10 Genes com maior frequência representam 36% das classes, assim essas possuem a maior relevancia para o nosso modelo. Porém isso significa que apenas 3.8% dos nossos genes representam 36% das classes.

Apos analisar os genes é necessário analisar a 'Variation' pois essa já foi identificada que possui mais valores unicos.

Apenas as 10 variations de maior relevancia, ou seja 0.33% dos tipos de 'Variation' representam um total de 8.85% das classes alvo.

É perceptivel que possuem algumas poucas 'Variations' que possuem uma relevancia muito maior que as outras, porém o restante possui uma relevância similar. Observando a variancia acumulada temos o mesmo comportamento, um pulo no inicio e após um crescimento que se torna constante.

4.2 Tabela de Contigencia

Analisando de forma generalizada é perceptivel qque determinados 'Gene' estão amplamente concentrados em uma categoria, o mesmo serve para 'Variation' que possui uma especificidade ainda maior.

Por exemplo, o 'Gene' ABL1 estã 92% na classe 2 e o restante, 7.69%, na classe 7. Já para 'Variation' o valor '1_2009trunc' esta 100% na classe 1.

QUI-QUADRADO

Analisando o teste do qui-quadrado, as nossas variaveis apontam uma alta taxa de confiança entre a relação de ambas as variaveis qualitativas com a variavem target.

Visto que não possuimos dados quantitativos, a analise exploratoria finaliza por aqui. Concluindo que possuimos muitos valores unicos para ambas as features qualitativas. Possuimos uma grande parcela das classes atribuidas a poucos 'Genes' e 'Variations'.

Ambas as variaveis quantitativas possuem associação com a variavel target. O nivel de confiança é alto.

5. Pre Processamento

Possuimos valores NA para a coluna 'Text', para um melhor tratamento iremos subsituir o seu valor por: 'Gene' + 'Variaton'.

Iremos executar uma série de operações para realizar a limpeza do texto e generalizar para os algoritmos:

Lemmatization:

Segue comparação abaixo entre o texto da primeira linha antes de ser processado e após ser processado.

5.1 TFIDF

Iremos calcular o TFIDF das palavras para entendermos a frequencia de ocorrencia por frase x documento. Porem iremos solicitar um df minimo para a palavra ser considerada, assim não iremos contar palavras com poucas ocorrencias, também iremos considerar que pode ser considerado: unigrama, bigrama e trigrama para uma melhor contextualização. Por ultimo iremos limitar a somente 1000 features em nosso TFIDF, assim buscando as palavras com maior impacto.

5.2 Truncated SVD

Iremos utilizar o algoritmo de TruncatedSVD para reduzir os nossos dados a componentes, a sua vantagem em relação ao PCA é que o TruncatedSVD trabalha melhor com dados esparsos. A sua diferença é que não é realizado uma centralização dos dados. Assim irá ter melhores resultados com a nossa matriz de TFIDF.

Para o nosso caso 1000 componentes será o suficiente para o nosso modelo cobrir os dados, então iremos de 100.000 features para 1000 componentes, assim reduzindo a nossa dimensionalidade.

5.3 One Hot Encoding

Iremos utilizar one hot encoding para converter as nossas classes categoricas como 'Gene' e 'Variation' em numericas. Porém essas classes não apresentam hierarquia, assim iremos optar por One Hot Encoding e não Labelencode.

Agora iremos concatenar os componentes do TruncatedSVD, gerados apartir do TFIDF no datatable final.

5.4 Salvando/Carregando Dataset

Antes de iniciarmos a fase de treino é interessante salvarmos em um aruivo '.csv' os dados, assim para execuções futuras não é necessário executar as etapas anteriores.

6 Treino, Teste e Validação

Iremos separar os nossos dados em treino, teste e validação. Onde os dados de validação serão retirados dos dados de treino e utilizados para otimização durante o treinamento. Já os dados de teste serão separados de forma que não interfiram no resultado final.

6.1 Distribuição por conjunto

7. Modelagem Preditiva

7.1 Criação de Modelos Bases

Primeiramente iremos criar os modelos bases para entender qual comportamento é melhor para os nossos modelos preditivos. Os modelos bases irão ser criados com as seguintes configurações:

- Balanceamento em treino = True or False
- Calibracao = True or False
- Conjunto de calibracao: Treino ou validacao

Para as configuracoes acima, iremos utilizar os seguintes algoritmos: Regressão Logistica, Linear SVM, Random Forest, XGBoost e KNN.

Abaixo visualizamos que os 2 melhores modelos são do mesmo algoritmo, Random Forest. A unica diferença entre eles é em relação ao balanceamento um possuo e o outro não.

Configuração do melhor modelo: