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/ |
Nesta etapa o objetivo é aprendermos algumas técnicas para obter um modelo machine learning melhor que o anterior.
Para alcançar este objetivo vamos aprender a utilizar o algoritmo RandomForestClassifier, aprender os algoritmos TfidfVectorizer da sklearn.feature_extraction.text e scipy.sparse e também aprenderemos como aplicar a técnica Active Learning.
COM NOTEBOOK 3_Random_Forest_Classifier.ipynb
Utilizaremos o arquivo raw_data_with_labels.csv e faremos conforme documento 2-Decision-Tree-Classifier.md até a criação das features.
Após criamos as features, vamos separar o dataset de treino e dataset teste por data de publicação/upload, por ser uma time series.
Vamos transformar as strings dos títulos dos vídeos dos datasets treino e dataset teste em uma representação numérica significativa criando uma matriz esparsa (*1) com o algoritmo Term-frequency TfidfVectorizer (*2), para reduzir de forma inteligente a quantidade de elementos a consultar. As figuras a seguir nos mostram que reduziremos de 44004 elementos para 1277 elementos :
Linha 24 do notebook
Linha 25 do notebook
Outra boa e comum prática é concatenaremos dados numéricos com dados string ou concatenarmos matriz densa com matriz esparsa, e para isto utilizaremos a biblioteca scipy.sparse
Após estas técnicas vamos treinar o algorítmo RandomForestClassifier configurando o argumento class_weight="balanced" (mesmo objetivo do explicado no documento 2-Decision-Tree-Classifier.md).
Visualizaremos a métrica predict_proba do algorítmo RandomForestClassifier para verificar a distribuição da probabilidade prevista da classe label 1 do dataset. Esta é importante para calcular a pontuação no auc-roc conforme imagem a seguir :
roc_auc_score - probability estimates which sum to 1
A métrica average precision da biblioteca sklearn.metrics conforme imagem a seguir informa que o algorítmo teve um percentual de 19,49% de exemplos positivos, que representa vídeos cujo labelling é 1 (*3).
A métrica auc-roc da biblioteca sklearn.metrics conforme imagem a seguir informa que o algorítmo teve uma probabilidade percentual de 59,58% de selecionar os exemplos positivos, que representa vídeos cujo labelling é 1 (*3).
Esta serve para melhor visualizarmos o ranking dos vídeos : dos mais interessantes para os menos interessantes.
Importante :
O objetivo em ambos métricas average precision e auc-roc é alcançar 1.0 ou o valor mais próximo possível, sendo esta a nossa baseline técnica em machine learning.
Aqui vamos perceber que houve uma pequena melhora nas métricas com o mesmo tuning aplicado no algorítmo DecisionTreeClassifier e RandomForestClassifier. Vamos aplicar a técnica active learning para melhorar mais as métricas.
Dependendo do projeto, a coleta de mais dados assim como fazer anotações pode aumentar desnecessariamente o investimento financeiro e/ou tempo para finalizá-lo, e realizar anotações aleatórias sem um conhecimento qualificado pode prejudicar o modelo preditivo de machine learning. Por exemplo :
Imagens radiográficas, ressonância magnética e similares precisam de especialistas médicos para fazer anotações de tumor maligno, tumor benigno, não tumor. Estes especialistas são caros e o active learning ajuda a reduzir investimentos na coleta das anotações com estes profissionais.
A técnica Active Learning de forma rápida vai nos ajudar a :
- entender o motivo de precisarmos de mais dados em nosso dataset
- selecionar e disponibilizar os dados mais difíceis do modelo machine learning predizer
- selecionar os melhores exemplos-dados em datasets para fazermos as anotações
- gerar mais exemplos reais para fazer anotações
- agilizar na coleta das anotações em projetos com prazo curto para fazer anotações
- facilitar a coleta das anotações de profissionais especialistas como médicos, biólogos, astronomos, entre outros
- desenvolver modelos machine learning mais performáticos
- evitar altos custos em qualquer projeto
- economizar investimentos financeiros em qualquer projeto
- agilizar no desenvolvimento de testes em modelos preditivos machine learning
Vamos pegar o dataset original raw_data_with_labels.csv, executar o processo de separação de dados, limpeza de dados, transformação de dados, que são 99% iguais aos que aprendemos nos notebooks 1-dataset-collect-clean.md e 2-Decision-Tree-Classifier.md, vamos trazer apenas os registros cuja coluna Y seja nula, aplicaremos o algorítmo predict_proba do algorítmo RandomForestClassifier sob os títulos de vídeos e gravaremos o resultado no dataset, em um novo campo p (probabilidade). Então selecionaremos os vídeos mais próximos da fronteira dos 50% positivo e 50% negativo (verdadeiro ou falso), por que são os mais prováveis de acertar mesmo sendo difíceis do modelo predizer.
Atenção :
Dependendo da quantidade de dados no dataset, será necessário considerar dados mais distantes da fronteira 50-50.
Outro detalhe é que amostras muito distantes da fronteira, provavelmente são vídeos que realmente não assistiremos.
Neste processo nós programaremos um intervalo fixo para pegar entre 70 e 75 registros e deixaremos aleatório entre 30 e 25 registros, desconsiderando os já selecionados, é claro.
Por fim, geraremos o arquivo active_labels.csv com estes aproximadamente 100 registros a mais, para fazermos as anotações e melhorar nosso modelo machine learning.
Dicas :
- A função scipy sparse é mais performática do que a função numpy sparse.
- É comum concaternar matriz esparsa com matriz densa
- 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 na numeração em português é diferente do em 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.
- Métrica realística : Encontrar características iguais entre os dados, ainda que seja necessário converter quantidade de dados x por ano em por dia. Ex : Upload de vídeos por dia, visualizações por dia ou algo semelhante.
- Features x Banco de dados : Em um projeto real se houver muitas features, uma boa atitude é salvar em banco de dados.
Nota :
(*1) Matriz esparsa é aquela que armazena valores diferentes de zero e isto significa matriz mais otimizada.
(*2) TfidfVectorizer reduz o impacto de tokens que ocorrem com muita frequência dando mais peso as palavras que aparecem com menor frequência por linha de vídeo, considerando todas as linhas do dataset e vai ignorar as palavras que repetem em todas as linhas de vídeos, dentro do dataset.
Utilizar o objeto TfidfVectorizer para transformar textos em uma representação significante de números, utilizar a predição do algoritmo DecisionTreeClassifier, analisar sua probabilidade de acerto de predição e sua precisão curva ROC.
Ex : machine e learning apareceram em praticamente todos os vídeos e terão um peso menor.
O argumento min_df do algoritmo TfidfVectorizer :
-> min_df=2 : o algorítmo vai considerar significante as palavras que aparecerem o mínimo possível por linha dentro do conjunto de linhas dentro do dataset.
-> min_df=1 : o algorítmo vai considerar significante cada palavra diferente encontrada, por linha dentro do conjunto de linhas dentro do dataset. Uma palavra considerada única em uma linha, pode estar na linha seguinte e será considerada incorretamente como difrentes, então dependendo do projeto esta configuração pode prejudicar.
(*3) Labelling 0 -Vídeo que provavelmente não vamos assistir; Labelling 1 -Vídeos que provavelmente vamos assistir
Fontes de estudo :
- Curso Solução Completa de Data Science - Instrutor Mario Filho-Kagle Gran Master
- predict_proba
- 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