¿Cómo aplicar estadística descriptiva a los cambios en el precios de una acción?
Para empezar, hay que entender la importancia de aplicar estadística descriptiva a los precios de una acción, preguntándonos ¿Qué consecuencias nos traería no hacerlo? La respuesta a esta pregunta es tan directa y cruda como: no tener una visión objetiva de la distribución de los cambios en el precio, no tener una visión objetiva de la volatilidad histórica en el precio y no tener idea del rendimiento promedio. En pocas palabras, estarías invirtiendo ciegamente tu dinero, y si eres una persona madura y sensata, estoy seguro que es algo que no deseas para futuro financiero.
Ahora, este artículo no pretende ser una clase magistral sobre estadística descriptiva ni nada por el estilo porque esto lo puedes encontrar en cualquier libro decente de estadística en Internet. Más bien nos concentraremos en analizar los resultados estadísticos de un ejemplo real. Para esto solo debes tener en claro el concepto de los retornos simples, si no te sientes familiarizado con el tema, puedes leer nuestro artículo sobre retorno simple y retorno continuo. Y si te sientes perdido sobre los conceptos estadísticos, te recomiendo indagar en profundidad sobre cada uno de ellos en tu tiempo libre.
Cálculos estadísticos sobre el precio de las acciones de Google
Con lo anterior en mente, a continuación tienes un script elaborado en Python donde analizaremos los cambio en el precio de las acciones de Google en periodicidad semanal con datos que partes desde el 19 de agosto de 2004. Puedes configurar el código de programación a tu conveniencia. Y, cabe recalcar que este análisis también lo puedes replicar utilizando cualquier programa estadístico como por ejemplo el paquete de Análisis de Datos de Excel.
Módulos
import scipy
from matplotlib import pyplot as plt
from pandas_datareader import data as pdr
import seaborn as sns
import yfinance as yfin
import datetime as dt
from scipy.stats import sem
from scipy.stats import kurtosis
from scipy.stats import skew
import statistics
yfin.pdr_override()
Extracción y limpieza de datos
asset = "GOOGL"
end = dt.datetime.now()
start = dt.datetime(2004,8,19)
dataframe = pdr.get_data_yahoo(asset, start, end, interval="1wk")
dataframe["c-c Returns [%]"] = 100*dataframe["Adj Close"].pct_change()
dataframe.dropna(subset = ["c-c Returns [%]"],how='all', inplace=True)
df = dataframe["c-c Returns [%]"].to_numpy()
[*********************100%%**********************] 1 of 1 completed
Visualización de datos
IQR = scipy.stats.iqr(df)
n=len(df)
bin_width = 2*IQR/(n**(1/3))
bins_number = int((max(df)-min(df))/bin_width)
plt.clf()
fig = plt.figure(figsize=(7,7))
sns.histplot(x=df,bins=bins_number)
plt.title("Ditribución de Rendimiento Simple")
plt.show()
Cálculos estadísticos
zero = 0
negative = 0
positive = 0
for i in df:
if i==0:
zero += 1
elif i<0:
negative += 1
else:
positive += 1
print("Descriptive Statistics:",
"\nmean: ",df.mean(),
"\nstd error:", sem(df),
"\nmedian: ", statistics.median(df),
"\nmode: ",statistics.mode(df),
"\nvar: ", statistics.variance(df),
"\nstd: ", statistics.stdev(df),
"\nkt: ", kurtosis(df),
"\nsk: ", skew(df),
"\nmax: ",df.max(),
"\nmin: ",df.min(),
"\nrange: ",df.max()-df.min(),
"\ncount: ",df.size,
"\nbins: ",bins_number,
"\npositives ",positive,
"\nnegatives ",negative,
"\nzeros ",zero
)
Descriptive Statistics: mean: 0.47868042727184734 std error: 0.13232285014885178 median: 0.5096518106136316 mode: -1.9942748788251863 var: 17.68443003823064 std: 4.205285963906693 kt: 2.890185751285161 sk: 0.4552040464139131 max: 25.806041806574108 min: -15.350622233984657 range: 41.156664040558766 count: 1010 bins: 44 positives 565 negatives 445 zeros 0
Análisis de resultados
Ahora, de los resultados que nos arroja Python podemos resaltar principalmente que:
- El rendimiento promedio es de 0.478
- La volatilidad de la acción es de 4.205% lo que implícitamente nos indica el porcentaje de riesgo que implica invertir en esta acción con una periodicidad semanal.
- La Curtosis tiene un valor positivo de 2.890 lo que indica que tenemos cierta aglomeración cercanos al valor promedio (0.478). Lo que se corrobora con el gráfico de distribución de rendimientos.
- El coeficiente de Fisher tiene un valor positivo de 0.455 lo que indica que la acción tiende a tener más movimientos positivos que negativos. Específicamente, han se evidencia 565 semanas en las que los rendimientos han sido positivos y 445 en las que los rendimientos han sido negativos. Además, el gráfico de distribución muestra que la cola derecha es más pronunciada que la cola izquierda.
Con todo lo anterior, podemos concluir que la el volatilidad (riesgo) histórica en periodos semanales en la acción de Google es de 4.205%. Dado que hay más semanas con rendimientos positivos que aquellas con rendimientos negativos. Debemos ser un tanto más cuidadosos al abrir una posición en Short que en abrir una Long. Además, en el gráfico de distribución, la cola derecha es más pronunciada que la izquierda, lo que nos indica que los rendimientos positivos tienden a ser más bruscos que los rendimientos negativos. Por último, la Curtosis muestra una aglomeración de registros alrededor del promedio. Y teniendo en cuanta que el promedio tiene un valor de 0.478 podemos inferir que hay una cantidad considerable de semanas en las que el precio de la acción de Google varía pobremente.
El contenido de la presente comunicación o mensaje no constituye una recomendación profesional para realizar inversiones en los términos del artículo 2.40.1.1.2 del Decreto 2555 de 2010 o las normas que lo modifiquen, sustituyan o complementen.