generated from DeML-Research/Python-Project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
notes
182 lines (140 loc) · 10.5 KB
/
notes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# -- --------------------------------------------------------------------------------------------------- -- #
# -- project: Trading System with Genetic Programming for Feature Engineering, Multilayer Perceptron -- #
# -- ------- Neural Network Predictive Model and Genetic Algorithms for Hyperparameter Optimization -- #
# -- file: notes.txt : Notes in spanish about the main components of the project -- #
# -- author: IFFranciscoME - [email protected] -- #
# -- license: GPL-3.0 License -- #
# -- repository: https://github.com/IFFranciscoME/Genetic_Net -- #
# -- --------------------------------------------------------------------------------------------------- -- #
# Nota sobre el uso de la estructura de proyectos de python
# -- PROYECTO EN 2 PASOS ---------------------------------------------------------------------------------- #
# -- ------------------- ---------------------------------------------------------------------------------- #
ENTRADA:
Utilizar los precios historicos del tipo de cambio de los ultimos 10 años
SALIDA:
Pronosticar si el precio del dia de mañana cerrará a la baja o a la alza (y probar esto históricamente)
# --- PROYECTO EN 3 PASOS --------------------------------------------------------------------------------- #
# -- --------------------- -------------------------------------------------------------------------------- #
ENTRADA:
4 Precios historicos por dia (Apertura, Maximo, Minimo, Cierre)
PROCESAMIENTO:
Proponer 3 modelos de machine learning para hacer el pronostico
SALIDA:
Guardar resultados por period y en una prueba para todos los periodos, para todos los modelos, para
todos los periodos trimestrales y semestrales de los ultimos 10 años
# --- PROYECTO EN 5 PASOS --------------------------------------------------------------------------------- #
# -- -------------------- --------------------------------------------------------------------------------- #
ENTRADA:
Utilizar los 4 precios historicos (Apertura, Maximo, Minimo, Cierre) y Volumen de futuros del tipo de
cambio de los ultimos 10 años.
PROCESO 1:
Ing de variables autoregressivas y producto hadamard como datos de entrada para el proceso de
generación de variables simbolicas utilizando programacion genetica.
PROCESO 2:
Proponer 3 modelos, en incrementos de complejidad, 1 que usa una combinacion lineal de variables de
entrada y la transformacion final es una sigmoidal (logistica), 1 que es una combinacion lineal de
variables de entrada y hace una transformacion en el hiperespacio (svm) y otro que es una combinacion
no lineal de transformaciones no lineales en un hiperespacio con funcion de activacion particular (mlp)
y lista de parámetros a optimizar el error de generalización.
pronóstico
PROCESO 3:
Division de datos en T periodos y conducir proceso de ing de variables, optimización/entrenamiento y
validación por cada T periodo, esto como propuesta de cross validation para series de tiempo.
SALIDA:
Visualización de resultados de cada periodo y para periodo global, con medidas de desempeño,
visualizaciones, y visualizacion de estabilidad de hiperparametros.
# -- Datos
Historicos de contratos "Futuros", de fuente oficial CME Group.
Son 4 precios por minuto (Open, High, Low, Close)
Se hizo el codigo para agruparlo en periodos de dias.
MOSTRAR ohlc_data
# -- Bloques de series de tiempo Secuenciales Sin Filtraciones
Con 10 años de informacion
Se dividen los precios por periodos trimestrales y semestreales (calendario)
para cada periodo se utiliza 70% de los datos para entrenamiento y 30% para validacion.
MOSTRAR plot_2
* Crossvalidation especial para series de tiempo, adaptado de "The Elements of Statistical Learning"
Para cada periodo se hace el proceso de ingenieria de variables, ajuste de modelos, optimizacion de
hiperparametros y calculo de metricas de desempeño de todos los modelos predictivos.
MOSTRAR t_folds
LOS DOS OBJETIVOS PARA ESTA MATERIA FUE RESOLVER EL PROBLEMA DE INGENIERIA DE VARIABLES Y EL DE OPTIMIZACION
DE HIPERPARAMETROS, PARA EL PRIMERO UTILICE PROGRAMACIÓN GENETICA Y PARA EL SEGUNDO ALGORITMOS GENÉTICOS.
# -- Programacion Genetica (Ingenieria de Variables)
# --------------------------------------------------------------------------------------------------------- #
Principio: Una variable explicativa puede ser la transformacion lineal de otras variables explicativas, con la
se hacen transformaciones estadisticas a la serie de los precios y estas se utilizan como entrada
de los "programas" construidos con variables simbolicas. Estos programas son en realidad ecuaciones que
utilizan las operaciones primitivas que se especifican. y la salida de cada programa/ecuacion calcula, para
cada punto del tiempo, un valor (variable explicativa) y ese valor se utiliza para calcular
la correlación de perason de toda la serie de tiempo con la variable objetivo, cuando al menos un individuo
de la generacion logra ese coeficiente de correlacion de pearson igual o mayor al objetivo, se toman los
19 siguientes individuos con mayor correlación hacia la variable objetivo y menor correlacion entre ellos.
Tenia 1 variables tipo autoregressivas y 1 variables del producto hadamard (multiplicacion 1x1) y esas se
utilizaron como variables simbólicas en el proceso de programación genética, armando así las ecuaciones
con variables simbólicas.
p_crossover = Requiere que existan 2 torneos
toma el ganador del 1ero y selecciona un sub-arbol del programa para reemplazarse
se hace otro torneo y toma un donador (el mejor de ese nuevo torneo) se selecciona un
sub-arbol aleatorio y se lo pone al primero.
p_subtree_mutation = toma el ganador de un torneo, selecciona un sub-arbol aleatorio para ser reemplazado,
un sub-arbol donante es generado aleatorio con las funciones primitivas
p_hoist_mutation = toma el ganador de un torneo, selecciona en aleatorio un subarbol, y un subarbol
del subarbol se toma otra vez en aleatorio y de este ultimo un aleatorio se toma
para "pegarse arriba" de lo que quedo.
p_point_mutation = toma el ganador de un torneo, selecciona nodo aleatorio y lo reemplaza
n_components = el numero de mejores programas a regresar del Hall of Fame
hall_of_fame = el numero de los "mejores" programas con los cuales compararse cuando se encuentren los
individuos menos correlacionados entre si de los n_components.
parsimony_coefficient = para penalizar programas muy grandes, los penaliza al ajustar su fitness con
el factor elegido, para asi que sean menos favorables para la seleccion.
RUTAS HEURISTICAS V0.1
"ramped half and half"
- Profundidad inicial, con el termino init_depth, para la poblacion inicial (arbol inicial) que sea en un
rango muy variado y amplio para poder tener arboles amplios de donde se elija una gran variedad de
sub-arboles y de nodos.
- Metodo de inicializacion, con el termino init_method, con un valor de "Half and Half", que es
tener la posibilidad de generar arboles con variaciones entre sus parametros de profundidad y amplitud,
expresadas en "depth" y "grow"
- Con ambas cosas anteriores se esta inicializando con el metodo "ramped half and half" como se menciona
en el documento de apoyo (paper).
"Objetivo por correlacion"
- la metrica de ajuste, con el parametro "metric", se elige "pearson". Para poder generar varias
variables explicativas a la vez, se maximiza la correlacion de estas respecto a la variable a explicar, y
se hace el calculo con el valor absoluto para que tambien se incluyan variables explicativas con
correlacion alta negativa.
Otra sugerencia es que se utilice pearson cuando las variables seran utilizadas para un modelo lineal,
y spearman para cuando es un modelo basado en arboles. Para el caso de un modelo lineal, hace sentido
puesto que las variables explicativas son relacionadas mediante una combinacion lineal de las mismas
para realizar la prediccion.
Los resultados de las variables generadas con menor correlacion entre ellas se reportan en el hall_of_fame,
y con el n_components se seleccionan las top N variables de acuerdo a su correlacion con la variable
explicativa.
# -- Red Neuronal Perceptron Multicapa con Retropropagacion (Clasificacion) ------------------------------- #
# --------------------------------------------------------------------------------------------------------- #
Funcion de activacion: Sigmoidal y Relu
aprendizaje: constant (learning_rate_init)y adaptive (constant si no mejora divide entre 5)
capas ocultas: varias y de 1 a 2 capas
neuronas por capa: varias cifras
# -- Regresion Logistica con Regularizacion tipo Elastic Net (Clasificacion) ------------------------------ #
# --------------------------------------------------------------------------------------------------------- #
ratio: ratio de regularizacion Ridge y Lasso (l1_ratio=0 == 100% Ridge | l1_ratio=1 == 100% Lasso)
c: el inverso de fuerza de regularizacion (valores pequeños es regularizacion fuerte)
# -- Maquinas de Soporte Vectorial (Clasificacion) -------------------------------------------------------- #
# --------------------------------------------------------------------------------------------------------- #
kernel: lineal y radial
C: el inverso de fuerza de regularizacion (valores pequeños es regularizacion fuerte)
gamma: coeficiente dentro del kernel radial.
gamma == 'scale' -> 1 / (n_features * X.var())
gamma == 'auto' -> 1 / n_features
# -- Algoritmos Geneticos (Optimizacion de Hiperparametros) ----------------------------------------------- #
# --------------------------------------------------------------------------------------------------------- #
Individuo = un caso evaluado (un resultado de la funcion fitness)
Mutacion de individuo = Eleccion aleatoria de cromosoma y eleccion aleatora de opcion para gen
Cruzamiento = "punto fijo" - divide a 2 individuos aleatorios en un punto aleatorio simetrico y recombina
los genes de cada division entre ambos individuos
Seleccion = Se hace k veces un torneo entre 10 individuos aleatoriamente elegidos de la poblacion y se
selecciona los HoF mejores de acuerdo al fitness
Evaluacion = funcion propia (medida de precision que considera la generalidad 50% 50%)
# -- Analisis a POSTERIORI
Opcion A) Realizar este proceso con 5 tamaños de periodo diferentes (1 trimestre, 1 semestre, 1 año,
2 años, 5 años)