Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Avaliando a quantidade de informação numa série de retornos

+1 voto
51 visitas
perguntada Dez 8, 2019 em Finanças por Julia Regina Scotti (41 pontos)  

Como avaliar a quantidade de informação contida na própria série de retornos.

Compartilhe

1 Resposta

0 votos
respondida Dez 8, 2019 por Julia Regina Scotti (41 pontos)  
editado Dez 10, 2019 por Julia Regina Scotti

No Capitulo 18 do livro o autor explora a quantidade de informação (no sentido de entropia) que a série contém.

Primeiramente vamos condificar nossa série de retornos dos futuros de e-mini das seguintes maneiras: (a) pelo método binário, (b) pelo método quantílico, (c) com um z-score. Então vamos calcular a entropia de cada uma dessas séries

%matplotlib inline
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
e_mini = pd.read_excel("Documents\e-mini.xlsx", sheet_name="dados", index_col=0, parse_dates=True, header=0)

A imagem será apresentada aqui.

A imagem será apresentada aqui.

(a) Quantize the returns series using the binary method.
(b) Quantize the returns series using the quantile encoding, using 10 letters.
(c) Quantize the returns series using the sigma encoding, where

e_mini['retornos'] = e_mini['price'].pct_change()

e_mini['binary'] = np.sign(e_mini['retornos'])

q_1 = e_mini['retornos'].quantile(q=0.1)
q_2 = e_mini['retornos'].quantile(q=0.2)
q_3 = e_mini['retornos'].quantile(q=0.3)
q_4 = e_mini['retornos'].quantile(q=0.4)
q_5 = e_mini['retornos'].quantile(q=0.5)
q_6 = e_mini['retornos'].quantile(q=0.6)
q_7 = e_mini['retornos'].quantile(q=0.7)
q_8 = e_mini['retornos'].quantile(q=0.8)
q_9 = e_mini['retornos'].quantile(q=0.9)
q_max = max(e_mini['retornos'].fillna(0))

e_mini['quantile'] = e_mini['retornos'].apply(lambda x: 1 if x < q_1 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 2 if x < q_2 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 3 if x < q_3 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 4 if x < q_4 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 5 if x < q_5 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 6 if x < q_6 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 7 if x < q_7 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 8 if x < q_8 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 9 if x < q_9 else  x )
e_mini['quantile'] = e_mini['quantile'].apply(lambda x: 10 if x < q_max else  x )

e_mini['sigma'] = (e_mini['retornos'] - e_mini['retornos'].mean())/e_mini['retornos'].std()

print(e_mini.head())

   price  volume  retornos  binary  quantile     sigma
2000-01-04  1411.75   64048       NaN     NaN       NaN       NaN
2000-01-05  1413.50   73121  0.001240     1.0       6.0  0.084087
2000-01-06  1404.00   67883 -0.006721    -1.0       2.0 -0.579149
2000-01-07  1459.75   60545  0.039708     1.0      10.0  3.289109
2000-01-10  1475.00   59343  0.010447     1.0       9.0  0.851208

A entropia de Shannon é definida como:

A imagem será apresentada aqui.

ou seja, dividi-se a série (x) nos valores que ela pode tomar A (x E A) e soma-se p(x)log2(p(x))

Então para a série binária a resposta é:

import numpy as np
p_1 = 0.54
p_minus1 = 0.45

H_binary = -p_1*np.log2(p_1)-p_minus1*np.log2(p_minus1)

H_binary = 0.99844

que resulta em H_binary = 0.99844 que significa dizer que a série binária praticamente não contém nenhum informação (serie o equivalente que saber que se der cara, chove com 50% de chance, se der coroa, chove com 50% de chance, e sabemos que choveu. provavelmente tinha dado cara ou coroa?)

Para a série quantilica, dividimos a probabilidade em 10 estados e, pela definição, cada estado tem 10% de chance de ocorrer, assim:

 p_q = 0.1
H_quantil = -10*p_q*np.log2(p_q)

H_quantil = 3.321928094887362

e a entropia é já 3,21, bastante superior ao caso binário.

Já na série de z-score, precisamos definir em quantas classes vamos dividir, por simplicidade vamos dividir em cada desvio padrão de desvio da média.

Como o z-score "absoluto" da série varia de -8 até 12, teremos 20 classes, mas 4 dessas tem p(x) = 0 e vão contribuir com zero para a entropia

p_minus8 = 0.0001975894092
p_minus7 = 0.0005927682276
p_minus6 = 0.0003951788184
p_minus5 = 0.001185536455
p_minus4 = 0.003161430547
p_minus3 = 0.009484291642
p_minus2 = 0.04248172298
p_minus1 = 0.1606401897
p_0 = 0.5536455246
p_1 = 0.1859316341
p_2 = 0.02746492788
p_3 = 0.01027464928
p_4 = 0.002173483501
p_5 = 0.001383125864
p_6 = 0.0005927682276
p_7 = 0
p_8 = 0
p_9 =0
p_10 = 0.0001975894092
p_11 = 0
p_12 = 0.0001975894092

p = [p_minus8, p_minus7, p_minus6, p_minus5, p_minus4, p_minus3, p_minus2, p_minus1, p_0, p_1, p_2, p_3, p_4, p_5, p_6, p_10, p_12]

logs = np.log2(p)
H_sigma = -np.dot(p, logs)

e H_sigma = 1.9095522110063734

Curiosamente, a entropia da série com desvios padrão, apesar de contar maior número de classes contem menos informação que a série quantilica, esse resutlado decorre de a mairo parte da série de sigmas estar em uma das classes (desvio padrão = 0)

comentou Dez 10, 2019 por Athos Carvalho (11 pontos)  
É importante comentar o motivo de a análise da entropia ser interessante para o estudante de finanças. Como dito por você, a entropia é uma medida da quantidade de informação carregada pelos preços. Sua avaliação pode trazer diversos benefícios, em casos de mercados com informação imperfeita. Com algoritmos de machine learning, dados de entropia podem levar a previsões de resultados prováveis, levando a decisões de investimento distintas, a depender do quão completa é a informação presente em determinado mercado.

O estudo da entropia pode ser utilizado para avaliar a eficiência de mercados, ajudando a identificar bolhas, por exemplo, que se formam em mercados de baixa entropia.

O livro utilizado como base para o exercício, Advances in Financial Machine Learning, escrito por Marcos Lopez de Prado, expõe o assunto de maneira extensiva.

Referência:

Marcos Lopez de Prado. 2018. Advances in Financial Machine Learning (1st ed.). Wiley Publishing.
...