Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

323
Vistas
Regresión logística restringida (variable de resultado) en Python

Para predecir futuros movimientos de existencias, utilizamos una regresión logística en Python. Lo hacemos convirtiendo el rendimiento diario en un rendimiento semanal. A continuación, determinamos si el rendimiento está subiendo o bajando, usando este código:

 # calculate weekly log returns and market direction stock['returns'] = np.log(stock / stock.shift(5)) stock.dropna(inplace=True) stock['direction'] = np.sign(stock['returns']).astype(int)

Tenemos tres señales de dirección:

 0 = hold the stock / do noting 1 = buy the stock -1 = sell the stock

A continuación se muestra el código para determinar la dirección larga, si la acción sigue aumentando, mantenga la acción, de lo contrario, véndala.

 stock['long direction'] = 0 for val, group in itertools.groupby(enumerate(stock['direction']), itemgetter(1)): # this is tuple unpacking, irrelevant is a list of values that aren't the last one, and last is the one we care about. [*irrelevent, last] = group stock['long direction'].iloc[last[0]] = -last[1] del stock['direction'] The output is as follows: Date close returns long direction 2021-12-08 1068.95 -0.024068 0 2021-12-09 1003.79 -0.077418 1 2021-12-10 1017.03 0.002028 -1 2021-12-13 966.40 -0.043137 0 2021-12-14 958.51 -0.092831 0 2021-12-15 975.98 -0.090989 0 2021-12-16 926.91 -0.079681 0 2021-12-17 932.57 -0.086698 1

Hemos utilizado una regresión logística para predecir los movimientos futuros, pero no sabemos cómo agregar una restricción que evite las ventas en corto. Por lo tanto, no queremos una dirección -1, -1 seguida, y no queremos una dirección 1, 1 seguida. Una señal 0,0,0,0 está bien, lo que significa que tenemos que mantener las acciones. Tenemos un gran desequilibrio en nuestro conjunto de datos, la señal 0 es predominante. Hemos tratado este problema usando class_weight .

A continuación se muestra el código actual:

 stock = stock.dropna() X = stock.loc[:, stock.columns != 'long direction'] y = stock['long direction'] X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size = 0.05, random_state = 5, shuffle=False) model1 = LogisticRegression(random_state=0, multi_class='multinomial', penalty='none', solver='newton-cg', class_weight={-1:0.35, 0:0.3, 1:0.75}).fit(X_train, y_train) preds = model1.predict(X_test) #print the tunable parameters (They were not tuned in this example, everything kept as default) params = model1.get_params() print(params)

A continuación se muestra la salida del código, donde la señal -1,-1 es el predictor (resultado o variables Y), pero no queremos que el modelo prediga las señales -1,-1 consecutivamente.

 long direction pred Date 2021-10-11 0 -1 2021-10-12 0 -1 2021-10-13 0 -1 2021-10-14 0 -1 2021-10-15 0 -1

¿Cómo podemos agregar la restricción de que el modelo sabe que las variables de resultado (Y) -1, -1 y 1,1 señales seguidas no son posibles? Solo puedo encontrar información en Internet sobre las restricciones en las variables de entrada (X).

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hay algunos enfoques para hacer esto.

El primer enfoque es modificar la recomendación después de que la haya dado la regresión logística, por lo que si devuelve -1 y luego -1 seguidos, tiene algún otro mecanismo que decide qué "cambiar" ese segundo -1 en ( esto podría ser cualquier cosa: una regla de decisión simple que cree usted mismo, retrocediendo en las proyecciones para usar valores largos anteriores, etc.). Este enfoque parece más una bodge que una solución elegante. Si prefiere una solución más elegante, continúe leyendo para conocer el segundo enfoque.

El segundo enfoque es cambiar su modelo para que incluya ese hecho. La idea fundamental de los algoritmos de Machine Learning, como la regresión logística, es poder hacer la predicción automáticamente sin que tengas que crear y definir reglas explícitas. De acuerdo con esto, puede modificar sus datos de entrenamiento para que tomen en cuenta la señal anterior como parte de sus datos de entrada, y luego los datos de salida de entrenamiento también usarán este hecho. Si sus datos de entrenamiento siempre tienen el indicador anterior como una de sus entradas, y cada vez que ese indicador anterior es -1, la salida nunca es -1 (porque no desea dos -1 seguidos), entonces el modelo aprenderá a no hacerlo. darle un -1 en nuevos datos de inferencia con el indicador anterior fue -1.

Un tercer enfoque que viene a la mente, que quizás esté entre el primer y el segundo enfoque, es tener tres modelos entrenados diferentes: un modelo entrenado siempre que la dirección anterior fuera -1, un modelo cuando fuera 0 y un modelo cuando fuera 1 El primer y tercer modelo ni siquiera tienen la opción -1 y 1 respectivamente en su espacio de salida de etiquetas, por lo que no pueden equivocarse de esa manera, y luego el segundo modelo tendría los tres -1, 0 y 1.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda