Data de entrega: 27/6 a meia noite, via Moodle.
Objetivos: fazer previsões em series temporais usando as técnicas de aprendizado de maquina vistas.
Leia o arquivo ouro2.csv. O arquivo contem ao preço semanal do ouro em reais. desde dólar e o euro, de 18/06/2000 até 13/06/2021. O atributo data (formato DD/MM/YYYY) não é importante e deve ser removido mas obviamente a sequencia de valores é a coisa importante.
Os dados mais recentes estão no começo do arquivo e os mais antigos ao final.
Separe as 100 das entradas mais recentes. Você reportará sua taxa de acerto nesses 100 dados e, você não pode usar a taxa de acerto nesse conjunto para tomar decisões. Vamos chamar este conjunto de conjunto de medida.
Você deve usar as primeiras 996 das medidas ( conjunto de treino) para definir que classificadores e regressores você usara, que preprocessamento (se é que você usará algum), que hiperparametros, e que janela de do passado para fazer as previsões (mais sobre isso abaixo), etc. Quando voce tomar suas decisões, voce treina seu programa final em todo o conjunto de treino e roda, uma unica vez, no conjunto de medida.
Eu estou interessado em 2 medidas.
o problema de classificação de prever se preço do ouro vai subir ou descer na próxima semana. A medida a ser usada é acurácia
o problema de regressão de prever o preço do ouro na próxima semana. A medida de erro para esse problema é RMSE.
Reporte essas 2 medidas no conjunto de medida (as 100 ultimas datas)
Previsão em series temporais, ou usam uma forma de redes neurais recorrentes RNN que não vimos na disciplina ou usam a previsão numa janela fixa do passado.
Nesta segunda alternativa, fixa -se uma janela w, e para fazer a previsão do dado x_i, usa-se a o vetor x_{i-w},x_{i-w+1} \dots x_{i-1}. Ou seja você usa um vetor de tamanho w para prever o próximo valor da serie. Essa técnica é de vez em quanto chamada de rolling ou sliding window
Você tem várias decisões de projeto que você deve explorar. Essas decisões devem ser exploradas - não há nenhuma decisão em aprendizado de maquina que pode só pensada, tudo precisa ser explorado, algumas coisas dão certo algumas não no problema em específico.
qual a janela de previsão w Essa é com certeza um dos mais importantes parâmetros que você precisa explorar
você vai tratar do problema de classificação como um problema em separado ou como uma simplificação do problema de regressão (se o valor predito pelo do regressor é maior que o do dia anterior reporte subir para o classificador?
que preprocessamento dos dados você vai executar. Um que me parece razoável é prever a mudança do valor do preço em relação à ultima semana, em vez de prever o valor do preço na próxima semana. Quais outros preprocessamento valem a pena ser feitos?
que algoritmos de regressão e classificação e seus hiperparametros você vai usar?
o seu conjunto de treino é limitado ou não. Uma vez que você selecionou um conjunto de teste (dentro dos 996) todas os dados anteriores podem ser usados para treino (você treina usando as rolling windows - cada tupla de w valores dos dias anteriores associados ao valor do próximo dia). Mas pode ser que valha a pena não “olhar muito para o passado” - pode ser que só vale a pena olhar para um passado limitado para o treino.
Você tem os conjunto de 996 dos dados para tomar essas decisões. Você deve fazer alguma validação cruzada neste conjunto de dados para tomar essas decisões. Eu sugiro uma repetição de 5 vezes de um split de treino e teste, mas se lembre que o correto em series temporais é que o conjunto de teste é sempre no futuro do conjunto de treino.
Por exemplo, para simplificar, vamos dizer que os dados de 2019 e 2020 serão usados para as medidas finais. Assim voce tem os dados de 1999 a 2018 para tomar todas as suas decisoes. Voce deve dividir esses dados em (digamos 5) pares treino/teste. Como o primeiro par, vamos dizer voce usa de 1999 a 2016 como treino e 2017+2018 como teste. Para o segundo par, voce escolhe 1999 a 2014 como treino e 2015+2016 como teste, e assim por diante. Voce mede a acurácia/erro nesses conjuntos de testes tendo treinado do conjunto de treino correspondente, e escolhe a melhor alternativa (melhor média)
Voce também pode diminuir os conjuntos de treino, de forma que eles tenham o mesmo tamanho. Por exemplo o primeiro treino vai de 2006 a 2016, o segundo de 2004 a 2014, e assim por diante.
No final, voce treina a sua melhor alternativa no conjunto dos 996 inteiro (nesse exemplo de 1999 a 2018) e apresenta os resultados finais (RMSE e acurácia sobre a decisão se o cambio vai subir ou não) para o conjunto de medida final 2019+2020.
Previsões em series temporais é um assunto muito antigo, anterior a grande maioria das técnicas de aprendizado de maquina. Essas técnicas mais antigas se preocupam com coisas como trend (direção geral de uma serie por exemplo taxa de cambio real/dolar, que na media sempre sobe) e seasonality (variações periódicas na serie como por exemplo uso de energia, que depende do dia da semana - fim de semana ou não - e do período no ano - inverno vs verão).
Você encontrara várias páginas na internet com discussão desses tópicos. No caso da nossa serie, não acho que trend e seasonality sejam problemas e acho que você não deve se preocupar com isso.
Há técnicas anteriores a aprendizado de maquina que também acho que você não precisa se preocupar, como ARIMA ou ARMA, etc. Há coisas como auto-correlações que são partes destas técnicas que também acho que você não precisa se preocupar. Esse blog, por exemplo https://www.machinelearningplus.com/time-series/time-series-analysis-python/ discute essas técnicas “mais tradicionais”. Este https://machinelearningmastery.com/time-series-forecasting-methods-in-python-cheat-sheet/ também
No relatório final, descreva o algoritmo final, os hiperparametros, o preprocessamento, etc e reporte o RMSE e a acurácia sobre a decisão se a taxa subira ou não (ficar igual é não subir) no conjunto de medida final. Reporte também as medidas que voce obteve usando os conjuntos de testes - eu quero comparar se os valores que voce obteve quando explorando as alternativas é parecido com o valor quando usando o conjunto final de avaliação.
Descreva as alternativas que voce testou e as medidas médias dessas alternativas no conjunto de exploração (os 90%). Nao precisa explicitar todos os valores de hiperparametros que voce testou, apenas os melhores valores. Eu estou interessado em a) a sua criatividade em propor e testar diferentes alternativas, b) seu rigor em ter testados um bom numero de regressores e classificadores (se voce decidir usar classificadores).
O relatório pode ter poucas paginas, desde que ele descreva suficientemente bem a solução final e as mais interessantes alternativas testadas. Eu NAO preciso do notebook Jupyter de todas as alternativas.
vamos supor que os seu dados sao:
1.2 2.1 3.2 4.1 5.4 6.2 7.3 8.1 9.8 || 10.3 11.4 12.2
A barra dupla separa o conjunto de treino e de teste ou seja o conjunto de treino vai do 1.2 ao 9.8 e o de teste do 10.3 ao 12.2
vamos assumir que a sua janela de previsão é 4. Ou seja voce usa dados os 4 dadis anteriores para prever do próximo
Neste caso seu conjunto de treino é:
1.2 2.1 3.2 4.1 | 5.4
2.1 3.2 4.1 5.4 | 6.2
3.2 4.1 5.4 6.2 | 7.3
4.1 5.4 6.2 7.3 | 8.1
5.4 6.2 7.3 8.4 | 9.8
onde a barra vertical separa a entrada (4 valores) da saída.
O conjunto de teste é:
6.2 7.3 8.1 9.8 | 10.3
7.3 8.1 9.8 10.3 | 11.4
8.1 9.8 10.3 11.4 | 12.2
Se a janela é 6 então os conjuntos são:
1.2 2.1 3.2 4.1 5.4 6.2 | 7.3
2.1 3.2 4.1 5.4 6.2 7.3 | 8.1
3.2 4.1 5.4 6.2 7.3 8.1 | 9.8
e o conjunto de treino:
4.1 5.4 6.2 7.3 8.1 9.8 | 10.3
5.4 6.2 7.3 8.1 9.8 10.3 | 11.4
6.2 7.3 8.1 9.8 10.3 11.4 | 12.2