Leitura do artigo “Run, Forest, Run? On Randomization and Reproducibility in Predictive Software Engineering”. Com tantos trabalhos em Engenharia de Software que utilizam técnicas de aprendizagem de máquina, era de se esperar encontrar algum que analisa a qualidade dos resultados obtidos em tais estudos. No caso, foram considerados artigos quanto à previsão de defeitos em unidade de software, quanto à previsão quanto à satisfação de um requisito de teste (mutante) no teste baseado em mutação (análise de mutantes) e quanto à previsão de indícios de problemas de design em uma unidade de código (code smells). No trabalho do
bruno_henrique_pachulski_camara, eu tinha reparado que diversos parâmetros e configurações afetavam a replicabilidade, o que é novamente apontado no artigo. No entanto, eles identificam outros problemas. Por exemplo, muitos algoritmos de aprendizagem de máquina são probabilísticos (erroneamente ditos como não determinísticos) e dependem de uma semente de aleatoriedade. O artigo mostra claramente que isso tem um impacto importante nos resultados. Outro ponto é quanto à aleatoriedade para amostragem ao particionar os dados. Interessante que eles também indicam diferenças entre as implementações de algoritmos como ameaças a tais estudos. Enfim, um trabalho interessante que permite retirar algumas lições para próximos estudos:
Treinar o modelo utilizando diferentes técnicas de amostragem (sampling) para um mesmo dataset (100 execuções). Isso se aplica ao 10-fold cross-validation, indicando a necessidade para fazer vários repartionamentos. Com uma base de dados de entrada, talvez isso tenha pouco efeito prático, mas só saberemos se é uma boa base de entrada se os resultados não variarem de forma significativa ao fazer isto.
Treinar o modelo de aprendizagem de máquina diversas vezes (100 vezes), definindo de forma explícita as sementes de aleatoriedade.
Ficar atento a outros pontos dos algoritmos que afetam a variabilidade dos resultados: tipo de solver, quantidade de iterações (quando utilizada como critério de parada), limiar de tolerância (tolerance threshold).
Informar detalhadamente as ferramentas e bibliotecas utilizadas, as versões e os parâmetros.
Avaliar a diferença estatística dos resultados da previsão (por exemplo, teste de Friedman para avaliar se existe ou não diferença e o teste post-hoc de Nemenyi para avaliar o efeito).