PROJETO
OBJETIVO
TIPO DE DADOS
TIPO MACHINE LEARNING
Recomendador de vídeos do youtube
Entender Ciência de dados na prática
Time Series
Supervisionado
LinkedIn : https://www.linkedin.com/in/claudineien/
PROJETO | OBJETIVO | TIPO DE DADOS | TIPO MACHINE LEARNING |
---|---|---|---|
Recomendador de vídeos do youtube | Entender Ciência de dados na prática | Time Series | Supervisionado |
LinkedIn : https://www.linkedin.com/in/claudineien/ |
O objetivo nesta fase é entender aonde o Active Learning vai trazer ou não melhorias ao nosso modelo machine learning. Nesta etapa identificaremos se houve melhoria ou não através das métricas average precision e auc-roc. Esta análise também nos ajudará a acompanhar mais rápidamente a qualidade do dataset, entender se há necessidade de termos mais dados para treinar e testar e aplicar uma ou mais mudanças em um ou mais processos do desenvolvimento deste projeto de ciência de dados.
Utilizaremos o notebook 4_Resultado_Active_Learning.ipynb para entendermos um pouco de como este processo funciona.
Nesta etapa vamos aplicar a técnica Labelling, aplicaremos limpezas no dataset, criaremos algumas Features, trabalharemos com matriz esparsas, term frequency, faremos tuning no algorítmo machine learning, treinaremos o algorítmo RandomForestClassifier e por fim teremos o resultados das métricas.
No final do notebook 3_Random_Forest_Classifier.ipynb nós aplicamos a técnica active learning e criamos o arquivo active_labels.csv para fazermos o labelling.
Vamos fazer o labelling conforme documentado em 2-Decision-Tree-Classifier.md.
Importante :
Baixar o arquivo active_labels.csv, cujo labelling já foi aplicado para facilitar nosso entendimento em cada técnica executada.
COM NOTEBOOK 4_Resultado_Active_Learning.ipynb
Ao aplicarmos as métricas average precision e auc-roc sobre o arquivo active_labels.csv considerando
as colunas y (labelling) e p (probabilidade) com o percentual de probabilidade de ser 1 (Video que provavelmente vamos assistir), vamos obter o seguinte resultado :
Esta primeira métrica realizada sobre o dataset com 100 exemplos que o modelo machine learning esta com dificuldade em classificar, indica que :
- As métricas average_precision_score e roc_auc_score estão sensíveis com relação a pequena quantidade de dados que temos.
- O dataset provavelmente deve receber mais tratamento e/ou mais dados para melhorarmos o modelo machine learning.
- O modelo parece estar melhorando com o Active Learning
Analisando um pouco do dataframe do arquivo active_labels.csv, identificamos que a coluna p contém a probabilidade que o modelo machine learning dá ao item 579 de ser 37,5% positivo e ao item 846 de ser 82,6% positivo.
Se usarmos um ponto de corte de 50%, sendo acima positivo e abaixo negativo, significa que o item :
- 579 seria um Falso Negativo (37,5% < 50%)
- 846 seria um Falso Positivo (82,6% > 50%)
Neste etapa nós aprenderemos como aplicar algumas técnicas para entendermos aonde o active learning nos esta ajudando.
Inciaremos pela limpeza e tratamento nos dados e logo em seguida aplicaremos três técnicas : aumentar dataset de validação, aumentar dataset de treino e aumentar dataset de validação e o dataset de treino.
- Vamos incluir a coluna [Novo] no dataframe com os 100 exemplos separados pelo active learning e incluir o número 1 nesta coluna.
- Vamos importar aproximadamente 498 registros do dataset raw_data_with_labels.csv, cujo o campo y seja diferente de nulo/vazio, que estão com anotações 1 ou 0.
- Vamos concatenar os arquivos active_labels.csv com 100 exemplos e com a nova coluna [Novo] ao raw_data_with_labels.csv com aproximadamento 500 exemplos. Ambos com labelling realizado. E teremos com um dataset com 600 registros, para melhorar o treinamento de nosso modelo machine learning.
- O novo dataset terá a coluna [Novo] com 1 indicando os 100 registros e gravará nan's para os outros 500 registros.
- Vamos eliminar a coluna p, por que será desnecessária aos testes.
- Vamos substituir o conteúdo nan por 0 na coluna [Novo] referente aos 500 registros que estão com nan's.
- Extrair apenas a data de uma coluna tipo objeto, com strings e datas.
- Extrair apenas o número de uma coluna tipo objeto, com strings e número.
- Criar Features necessárias.
Aumentar o dataset de validação é a técnica menos utilizada, mas a utilizaremos por que temos poucos dados e esta técnica é mais uma opção para analisarmos melhor a probabilidade, average precision e o auc roc.
Nos dados de treino selecionaremos os primeiros 50% dos dados dos 500 exemplos antigos e nos dados de validação selecionaremos os outros 50% dos dados antigos mais os 100 exemplos dos dados separados pelo active learning.
A seguir estão os valores average precision e auc-roc sob a probabilidade relacionada aos títulos :
Comparando com as métricas do algorítmo DecicionTreeClassifier nós tivemos uma melhoria nas métricas.
Esta técnica é a mais comumente utilizada.
Nos dados de treino selecionaremos os primeiros 50% dos dados dos 500 exemplos antigos mais os 100 exemplos dos dados separados pelo active learning e nos dados de validação selecionaremos a outra parte dos 50% dos dados antigos.
A seguir estão os valores average precision e auc-roc sob a probabilidade relacionada aos títulos :
Comparando com as métricas do algorítmo DecicionTreeClassifier nós continuamos com melhoria nas métricas, porém menor que o anterior.
Nos dados de treino selecionaremos os primeiros 50% dos dados dos 500 exemplos antigos mais os 100 exemplos dos dados separados pelo active learning e nos dados de validação selecionaremos a outra parte dos 50% dos dados antigosComparando com as métricas do algorítmo DecicionTreeClassifier nós continuamos com melhoria nas métricas.
Algumas informações importantes a saber :
1 Em todas as técnicas aplicaremos o algorítmo TfidfVectorizer e o scipy.sparse, executaremos o algorítmo RandomForestClassifier, seu algorítmo de probabilidade, o average precision e auc-roc da biblioteca sklearn.metrics.
2 As métricas estão muito sensíveis, alterando a cada pequena alteração.
3 Na maior parte das vezes quanto mais o conteúdo para treino e teste, mais eficaz o modelo machine learning ficará.
A precisão da pontuação entre a probabilidade dos dados de treino e dados de validação infelizmente diminuiu mas o AUC melhorou -esta mais próximo de 1. Entendemos que ambos estão bem sensíveis, por conta da pouca quantidade de dados.
Dica :
Formatação de datas : Fique atento à formatação de datas de português para inglês ou vice-versa
Número : O local do ponto em português é diferente do inglês
Transformar Data em valor numérico : O formato número é mais eficiente aos algoritmos machine learning
Modelo ml x Realidade : Para melhor eficiência do modelo machine learning os dados de treino e de teste devem ser o mais semelhantes possível a rotina da realidade em uma empresa ou em uma pesquisa de campo
Novo dataframe : Evite alterar os dados no dataframe principal, trabalhe sempre com a cópia. Esta prática agiliza o processo de manipulação dos dados e se algo der errado basta executar a instção de cópia do dataframe novamente, alem de evitar que alguma rotina que utiliza o dataframe principal funcione indevidamente.
Issue github :
TfidfVectorizer ngrams does not work when vocabulary provided #16017
Fontes de estudo :
- Curso Solução Completa de Data Science - Instrutor Mario Filho-Kagle Gran Master
- Entendiendo las Curvas ROC
- Método plot_tree
- Tabela de códigos para converter strings em datas no Python
- Testador de expressões regulares
- Numpy : Timedelta
- Pandas : Time/Date
- Curva de Precision/Recall
- ROC (Receiver Operating Characteristic) Curve
- feather-format
- TfidfVectorizer - Term Frequency
- TF-IDF Vectorizer scikit-learn
- sparse matrix
- ROC (Receiver Operating Characteristic) Curve
- Bag of Words (e TF-IDF)
- Sparse matrices
- TfidfVectorizer ngrams does not work when vocabulary provided #16017