Moving Average Pandas
Es importante señalar que hay varias maneras de definir el RSI. Normalmente se define en al menos dos maneras: usando un promedio móvil simple (SMA) como el anterior, o utilizando un promedio móvil exponencial (EMA). Heres un fragmento de código que calcula ambas definiciones de RSI y las traza para la comparación. Im descartar la primera fila después de tomar la diferencia, ya que siempre es NaN por definición. Tenga en cuenta que cuando se utiliza EMA uno tiene que tener cuidado: ya que incluye una memoria que se remonta al inicio de los datos, el resultado depende de dónde se inicia Por esta razón, por lo general la gente agregará algunos datos al principio, digamos 100 pasos de tiempo , Y luego cortar los primeros 100 valores RSI. En la gráfica de abajo, se puede ver la diferencia entre el RSI calculado usando SMA y EMA: el SMA uno tiende a ser más sensible. Obsérvese que el RSI basado en EMA tiene su primer valor finito en el primer paso de tiempo (que es el segundo paso de tiempo del período original, debido a descartar la primera fila), mientras que el RSI basado en SMA tiene su primer valor finito en el 14º paso. Esto se debe a que por defecto rollingmean () sólo devuelve un valor finito una vez que hay suficientes valores para llenar la ventana. BiagioChirico, gracias - no tengo tiempo para comprobar en detalle, pero una posibilidad es que la diferencia se debe a lo que he mencionado en el post, a saber, que hay algo de arbitrariedad causada por la cantidad de datos que se incluyen antes de la ventana que está Mirando, si es que (le di 100 días como ejemplo). En el artículo anterior sobre Investigación Backtesting Entornos En Python Con Pandas creamos un ambiente orientado a objetos basado en la investigación de backtesting y el medio ambiente. Probado en una estrategia de pronóstico aleatorio. En este artículo vamos a hacer uso de la maquinaria que introdujimos para llevar a cabo una investigación sobre una estrategia real, a saber, el promedio móvil Crossover en AAPL. Estrategia de crossover de media móvil La técnica de crossover de media móvil es una estrategia de impulso simplista muy conocida. A menudo se considera el ejemplo de Hello World para el comercio cuantitativo. La estrategia descrita aquí es larga solamente. Se crean dos filtros sencillos simples de media móvil, con periodos de retroceso variables, de una serie de tiempo particular. Las señales para comprar el activo ocurren cuando la media móvil de retroceso más corto excede la media móvil de retroceso más larga. Si el promedio más largo excede posteriormente el promedio más corto, el activo se vende de nuevo. La estrategia funciona bien cuando una serie de tiempo entra en un período de fuerte tendencia y luego invierte lentamente la tendencia. Para este ejemplo, he elegido Apple, Inc. (AAPL) como la serie de tiempo, con un breve lookback de 100 días y un largo lookback de 400 días. Este es el ejemplo proporcionado por la biblioteca de comercio algorítmico zipline. Por lo tanto, si queremos implementar nuestro propio backtester debemos asegurarnos de que coincide con los resultados en zipline, como un medio básico de validación. Implementación Asegúrese de seguir el tutorial anterior aquí. Que describe cómo se construye la jerarquía de objetos inicial para el backtester, de lo contrario el código siguiente no funcionará. Para esta implementación en particular he utilizado las siguientes bibliotecas: La implementación de macross. py requiere backtest. py del tutorial anterior. El primer paso es importar los módulos y objetos necesarios: Como en el tutorial anterior, vamos a subclase la clase base abstracta de la estrategia para producir MovingAverageCrossStrategy. Que contiene todos los detalles sobre cómo generar las señales cuando los promedios móviles de AAPL se cruzan entre sí. El objeto requiere una ventana corta y una ventana larga sobre la cual operar. Los valores se han fijado a valores predeterminados de 100 días y 400 días respectivamente, que son los mismos parámetros utilizados en el ejemplo principal de tirolesa. Los promedios móviles se crean mediante el uso de la función rollingmean de los pandas en las barrasCerrar el precio de cierre de la acción AAPL. Una vez que se han construido los promedios móviles individuales, la serie de señales se genera ajustando la colum igual a 1,0 cuando el promedio móvil corto es mayor que el promedio móvil largo, o 0,0 de lo contrario. A partir de esto, los pedidos de posiciones se pueden generar para representar señales comerciales. El MarketOnClosePortfolio está subclasificado de Portfolio. Que se encuentra en backtest. py. Es casi idéntica a la implementación descrita en el tutorial anterior, con la excepción de que las operaciones se llevan a cabo ahora en una base Close-to-Close, en lugar de una base Open-to-Open. Para obtener más información sobre cómo se define el objeto Portfolio, consulte el tutorial anterior. He dejado el código en la integridad y mantener este tutorial autónomo: Ahora que se han definido las clases MovingAverageCrossStrategy y MarketOnClosePortfolio, se llamará a una función principal para vincular toda la funcionalidad. Además, el desempeño de la estrategia será examinado a través de un gráfico de la curva de equidad. El objeto de DataReader de pandas descarga los precios de OHLCV de las acciones de AAPL para el período del 1 de enero de 1990 al 1 de enero de 2002, momento en el que las señales DataFrame se crean para generar las señales de sólo larga duración. Posteriormente, la cartera se genera con una base de capital inicial de 100.000 USD y los rendimientos se calculan sobre la curva de patrimonio. El paso final es utilizar matplotlib para trazar un gráfico de dos cifras de los precios de AAPL, superpuestos con las medias móviles y las señales de compra / venta, así como la curva de equidad con las mismas señales de compra / venta. El código de trazado se toma (y se modifica) a partir del ejemplo de implementación de tirolesa. La salida gráfica del código es la siguiente. Hice uso del comando IPython paste para ponerlo directamente en la consola IPython mientras estaba en Ubuntu, de modo que la salida gráfica permaneció en la vista. Las barras de color rosa representan la compra de la acción, mientras que los downticks negros representan la venta de nuevo: Como se puede ver la estrategia pierde dinero durante el período, con cinco operaciones de ida y vuelta. Esto no es sorprendente teniendo en cuenta el comportamiento de AAPL en el período, que estaba en una ligera tendencia a la baja, seguido por un aumento significativo a partir de 1998. El período de retroceso de las señales de media móvil es bastante grande y esto afectó el beneficio del comercio final , Que de otro modo podría haber hecho rentable la estrategia. En los artículos siguientes crearemos un medio más sofisticado de analizar el rendimiento, así como describir cómo optimizar los períodos de retroceso de las señales individuales de media móvil. Michael Halls-Moore Mike es el fundador de QuantStart y ha estado involucrado en la industria de finanzas cuantitativas durante los últimos cinco años, principalmente como desarrollador de Quant y más tarde como consultor de comerciante de Quant para fondos de cobertura. Moving promedio y modelos de suavización exponencial Como primer Paso en el movimiento más allá de los modelos medios, los modelos aleatorios de la caminata, y los modelos lineales de la tendencia, los patrones no estacionales y las tendencias se pueden extrapolar usando un modelo de la media móvil o del suavizado. La suposición básica detrás de los modelos de promedio y suavizado es que la serie temporal es localmente estacionaria con una media que varía lentamente. Por lo tanto, tomamos un promedio móvil (local) para estimar el valor actual de la media y luego usarlo como pronóstico para el futuro cercano. Esto puede considerarse como un compromiso entre el modelo medio y el modelo aleatorio-paseo-sin-deriva. La misma estrategia se puede utilizar para estimar y extrapolar una tendencia local. Una media móvil se denomina a menudo una versión quotomoldeada de la serie original porque el promedio de corto plazo tiene el efecto de suavizar los golpes en la serie original. Al ajustar el grado de suavizado (el ancho de la media móvil), podemos esperar encontrar algún tipo de equilibrio óptimo entre el rendimiento de la media y los modelos de caminata aleatoria. El tipo más simple de modelo de promediación es el. Promedio móvil simple (igualmente ponderado): El pronóstico para el valor de Y en el tiempo t1 que se hace en el tiempo t es igual al promedio simple de las observaciones m más recientes: (Aquí y en otros lugares usaré el símbolo 8220Y-hat8221 para permanecer en pie Para un pronóstico de la serie de tiempo Y hecho a la fecha más temprana posible posible por un modelo dado). Este promedio se centra en el período t (m1) / 2, lo que implica que la estimación de la media local tiende a quedar rezagada detrás del Valor real de la media local de aproximadamente (m1) / 2 periodos. Por lo tanto, decimos que la edad media de los datos en el promedio móvil simple es (m1) / 2 en relación con el período para el cual se calcula el pronóstico: es la cantidad de tiempo por el cual los pronósticos tenderán a rezagarse detrás de los puntos de inflexión en el datos. Por ejemplo, si está promediando los últimos 5 valores, las previsiones serán de aproximadamente 3 períodos tarde en la respuesta a los puntos de inflexión. Tenga en cuenta que si m1, el modelo de media móvil simple (SMA) es equivalente al modelo de caminata aleatoria (sin crecimiento). Si m es muy grande (comparable a la longitud del período de estimación), el modelo SMA es equivalente al modelo medio. Como con cualquier parámetro de un modelo de pronóstico, es habitual ajustar el valor de k para obtener el mejor valor de los datos, es decir, los errores de predicción más pequeños en promedio. He aquí un ejemplo de una serie que parece presentar fluctuaciones aleatorias alrededor de una media de variación lenta. En primer lugar, vamos a tratar de encajar con un modelo de caminata al azar, que es equivalente a una media móvil simple de un término: El modelo de caminata aleatoria responde muy rápidamente a los cambios en la serie, pero al hacerlo, recoge gran parte del quotnoisequot en el Los datos (las fluctuaciones aleatorias), así como el quotsignalquot (la media local). Si en lugar de eso intentamos una media móvil simple de 5 términos, obtendremos un conjunto de previsiones más suaves: El promedio móvil simple a 5 terminos produce errores significativamente menores que el modelo de caminata aleatoria en este caso. La edad promedio de los datos de esta previsión es de 3 ((51) / 2), de modo que tiende a quedar a la zaga de los puntos de inflexión en aproximadamente tres períodos. (Por ejemplo, parece haber ocurrido una recesión en el período 21, pero las previsiones no giran hasta varios periodos más tarde). Obsérvese que los pronósticos a largo plazo del modelo SMA son una línea recta horizontal, al igual que en la caminata aleatoria modelo. Por lo tanto, el modelo SMA asume que no hay tendencia en los datos. Sin embargo, mientras que las previsiones del modelo de caminata aleatoria son simplemente iguales al último valor observado, las previsiones del modelo SMA son iguales a un promedio ponderado de valores recientes. Los límites de confianza calculados por Statgraphics para los pronósticos a largo plazo de la media móvil simple no se amplían a medida que aumenta el horizonte de pronóstico. Esto obviamente no es correcto Desafortunadamente, no hay una teoría estadística subyacente que nos diga cómo los intervalos de confianza deberían ampliarse para este modelo. Sin embargo, no es demasiado difícil calcular estimaciones empíricas de los límites de confianza para las previsiones a más largo plazo. Por ejemplo, podría configurar una hoja de cálculo en la que el modelo SMA se utilizaría para pronosticar dos pasos adelante, tres pasos adelante, etc. dentro de la muestra de datos históricos. A continuación, podría calcular las desviaciones estándar de los errores en cada horizonte de pronóstico y, a continuación, construir intervalos de confianza para pronósticos a más largo plazo sumando y restando múltiplos de la desviación estándar apropiada. Si intentamos una media móvil sencilla de 9 términos, obtendremos pronósticos aún más suaves y más de un efecto rezagado: La edad promedio es ahora de 5 períodos ((91) / 2). Si tomamos una media móvil de 19 términos, la edad promedio aumenta a 10: Obsérvese que, de hecho, las previsiones están ahora rezagadas detrás de los puntos de inflexión en aproximadamente 10 períodos. Qué cantidad de suavizado es la mejor para esta serie Aquí hay una tabla que compara sus estadísticas de error, incluyendo también un promedio de 3 términos: El modelo C, la media móvil de 5 términos, produce el valor más bajo de RMSE por un pequeño margen sobre los 3 A término y 9 promedios, y sus otras estadísticas son casi idénticas. Por lo tanto, entre los modelos con estadísticas de error muy similares, podemos elegir si preferiríamos un poco más de capacidad de respuesta o un poco más de suavidad en las previsiones. El modelo de media móvil simple descrito anteriormente tiene la propiedad indeseable de que trata las últimas k observaciones por igual e ignora por completo todas las observaciones precedentes. (Volver al principio de la página.) Browns Simple Exponential Smoothing Intuitivamente, los datos pasados deben ser descontados de una manera más gradual - por ejemplo, la observación más reciente debería tener un poco más de peso que la segunda más reciente, y la segunda más reciente debería tener un poco más de peso que la tercera más reciente, y pronto. El modelo de suavizado exponencial simple (SES) lo logra. Sea 945 una constante quotsmoothingquot (un número entre 0 y 1). Una forma de escribir el modelo es definir una serie L que represente el nivel actual (es decir, el valor medio local) de la serie, tal como se estimó a partir de los datos hasta el presente. El valor de L en el tiempo t se calcula recursivamente a partir de su propio valor anterior como este: Así, el valor suavizado actual es una interpolación entre el valor suavizado anterior y la observación actual, donde 945 controla la proximidad del valor interpolado al valor más reciente observación. El pronóstico para el siguiente período es simplemente el valor suavizado actual: Equivalentemente, podemos expresar el próximo pronóstico directamente en términos de previsiones anteriores y observaciones previas, en cualquiera de las siguientes versiones equivalentes. En la primera versión, la previsión es una interpolación entre la previsión anterior y la observación anterior: En la segunda versión, la siguiente previsión se obtiene ajustando la previsión anterior en la dirección del error anterior por una cantidad fraccionada de 945. es el error hecho en Tiempo t En la tercera versión, el pronóstico es una media móvil exponencialmente ponderada (es decir, descontada) con el factor de descuento 1-945: La versión de interpolación de la fórmula de pronóstico es la más simple de usar si está implementando el modelo en una hoja de cálculo: se ajusta en un Célula única y contiene referencias de celdas que apuntan a la previsión anterior, la observación anterior y la celda donde se almacena el valor de 945. Tenga en cuenta que si 945 1, el modelo SES es equivalente a un modelo de caminata aleatoria (sin crecimiento). Si 945 0, el modelo SES es equivalente al modelo medio, asumiendo que el primer valor suavizado se establece igual a la media. La edad promedio de los datos en el pronóstico de suavización exponencial simple es de 1/945 en relación con el período para el cual se calcula la predicción. (Esto no se supone que sea obvio, pero se puede demostrar fácilmente mediante la evaluación de una serie infinita.) Por lo tanto, el pronóstico promedio móvil simple tiende a quedar rezagado detrás de puntos de inflexión en aproximadamente 1/945 períodos. Por ejemplo, cuando 945 0.5 el retraso es 2 períodos cuando 945 0.2 el retraso es 5 períodos cuando 945 0.1 el retraso es 10 períodos, y así sucesivamente. Para una edad promedio dada (es decir, la cantidad de retraso), el simple suavizado exponencial (SES) pronosticado es algo superior a la predicción del promedio móvil simple (SMA), ya que coloca relativamente más peso en la observación más reciente - ie. Es un poco más sensible a los cambios ocurridos en el pasado reciente. Por ejemplo, un modelo SMA con 9 términos y un modelo SES con 945 0.2 tienen una edad promedio de 5 para los datos de sus pronósticos, pero el modelo SES pone más peso en los 3 últimos valores que el modelo SMA y en el modelo SMA. Otra ventaja importante del modelo SES sobre el modelo SMA es que el modelo SES utiliza un parámetro de suavizado que es continuamente variable, por lo que se puede optimizar fácilmente Utilizando un algoritmo quotsolverquot para minimizar el error cuadrático medio. El valor óptimo de 945 en el modelo SES de esta serie resulta ser 0.2961, como se muestra aquí: La edad promedio de los datos de esta previsión es de 1 / 0,2961 3,4 períodos, que es similar a la de un movimiento simple de 6 términos promedio. Los pronósticos a largo plazo del modelo SES son una línea recta horizontal. Como en el modelo SMA y el modelo de caminata aleatoria sin crecimiento. Sin embargo, tenga en cuenta que los intervalos de confianza calculados por Statgraphics ahora divergen de manera razonable y que son sustancialmente más estrechos que los intervalos de confianza para el modelo de caminata aleatoria. El modelo SES asume que la serie es algo más predecible que el modelo de caminata aleatoria. Un modelo SES es en realidad un caso especial de un modelo ARIMA. Por lo que la teoría estadística de los modelos ARIMA proporciona una base sólida para el cálculo de los intervalos de confianza para el modelo SES. En particular, un modelo SES es un modelo ARIMA con una diferencia no estacional, un término MA (1) y ningún término constante. Conocido también como modelo quotARIMA (0,1,1) sin constantequot. El coeficiente MA (1) en el modelo ARIMA corresponde a la cantidad 1-945 en el modelo SES. Por ejemplo, si se ajusta un modelo ARIMA (0,1,1) sin constante a la serie analizada aquí, el coeficiente MA estimado (1) resulta ser 0.7029, que es casi exactamente un menos 0.2961. Es posible añadir la suposición de una tendencia lineal constante no nula a un modelo SES. Para ello, basta con especificar un modelo ARIMA con una diferencia no estacional y un término MA (1) con una constante, es decir, un modelo ARIMA (0,1,1) con constante. Las previsiones a largo plazo tendrán entonces una tendencia que es igual a la tendencia media observada durante todo el período de estimación. No puede hacerlo junto con el ajuste estacional, ya que las opciones de ajuste estacional están deshabilitadas cuando el tipo de modelo está ajustado a ARIMA. Sin embargo, puede agregar una tendencia exponencial a largo plazo constante a un modelo de suavización exponencial simple (con o sin ajuste estacional) utilizando la opción de ajuste de inflación en el procedimiento de previsión. La tasa apropiada de inflación (crecimiento porcentual) por período puede estimarse como el coeficiente de pendiente en un modelo de tendencia lineal ajustado a los datos en conjunción con una transformación de logaritmo natural o puede basarse en otra información independiente sobre las perspectivas de crecimiento a largo plazo . (Regreso al inicio de la página.) Browns Linear (es decir, doble) Suavizado exponencial Los modelos SMA y SES suponen que no hay ninguna tendencia de ningún tipo en los datos (que normalmente está bien o al menos no es demasiado malo para 1- Avance anticipado cuando los datos son relativamente ruidosos), y se pueden modificar para incorporar una tendencia lineal constante como se muestra arriba. ¿Qué pasa con las tendencias a corto plazo? Si una serie muestra una tasa de crecimiento variable o un patrón cíclico que se destaca claramente contra el ruido, y si hay una necesidad de pronosticar más de un período, la estimación de una tendencia local también podría ser un problema. El modelo de suavizado exponencial simple puede generalizarse para obtener un modelo lineal de suavizado exponencial (LES) que calcula las estimaciones locales de nivel y tendencia. El modelo de tendencia más simple que varía en función del tiempo es el modelo lineal de suavizado exponencial de Browns, el cual utiliza dos series suavizadas diferentes que están centradas en diferentes momentos del tiempo. La fórmula de predicción se basa en una extrapolación de una línea a través de los dos centros. (Una versión más sofisticada de este modelo, Holt8217s, se discute a continuación). La forma algebraica del modelo de suavizado exponencial lineal de Brown8217s, como la del modelo de suavizado exponencial simple, puede expresarse en varias formas diferentes pero equivalentes. La forma estándar de este modelo se expresa usualmente de la siguiente manera: Sea S la serie de suavizado simple obtenida aplicando el suavizado exponencial simple a la serie Y. Es decir, el valor de S en el periodo t está dado por: (Recuérdese que, Exponencial, esto sería la previsión para Y en el período t1). Entonces, vamos a Squot denotar la serie doblemente suavizada obtenida aplicando el suavizado exponencial simple (usando el mismo 945) a la serie S: Finalmente, la previsión para Y tk. Para cualquier kgt1, viene dado por: Esto produce e 1 0 (es decir, trucar un poco y dejar que el primer pronóstico sea igual a la primera observación real), y e 2 Y 2 8211 Y 1. Después de lo cual las previsiones se generan usando la ecuación anterior. Esto produce los mismos valores ajustados que la fórmula basada en S y S si estos últimos se iniciaron usando S 1 S 1 Y 1. Esta versión del modelo se utiliza en la página siguiente que ilustra una combinación de suavizado exponencial con ajuste estacional. Holt8217s Linear Exponential Smoothing Brown8217s El modelo LES calcula las estimaciones locales de nivel y tendencia al suavizar los datos recientes, pero el hecho de que lo haga con un solo parámetro de suavizado impone una restricción en los patrones de datos que puede encajar: el nivel y la tendencia No se les permite variar a tasas independientes. El modelo LES de Holt8217s aborda este problema incluyendo dos constantes de suavizado, una para el nivel y otra para la tendencia. En cualquier momento t, como en el modelo Brown8217s, existe una estimación L t del nivel local y una estimación T t de la tendencia local. Aquí se calculan recursivamente a partir del valor de Y observado en el instante t y de las estimaciones previas del nivel y de la tendencia por dos ecuaciones que les aplican el suavizado exponencial separadamente. Si el nivel estimado y la tendencia en el tiempo t-1 son L t82091 y T t-1. Respectivamente, entonces la previsión de Y tshy que habría sido hecha en el tiempo t-1 es igual a L t-1 T t-1. Cuando se observa el valor real, la estimación actualizada del nivel se calcula recursivamente interpolando entre Y tshy y su pronóstico, L t-1 T t-1, utilizando pesos de 945 y 1-945. El cambio en el nivel estimado, Es decir L t 8209 L t82091. Puede interpretarse como una medida ruidosa de la tendencia en el tiempo t. La estimación actualizada de la tendencia se calcula recursivamente mediante la interpolación entre L t 8209 L t82091 y la estimación anterior de la tendencia, T t-1. Utilizando los pesos de 946 y 1-946: La interpretación de la constante de suavizado de tendencia 946 es análoga a la de la constante de suavizado de nivel 945. Los modelos con valores pequeños de 946 asumen que la tendencia cambia muy lentamente con el tiempo, mientras que los modelos con 946 más grandes suponen que está cambiando más rápidamente. Un modelo con una gran 946 cree que el futuro lejano es muy incierto, porque los errores en la estimación de la tendencia son muy importantes cuando se pronostica más de un período por delante. Las constantes de suavizado 945 y 946 se pueden estimar de la manera habitual minimizando el error cuadrático medio de las previsiones de 1 paso adelante. Cuando esto se hace en Statgraphics, las estimaciones resultan ser 945 0,3048 y 946 0,008. El valor muy pequeño de 946 significa que el modelo supone muy poco cambio en la tendencia de un período al siguiente, por lo que básicamente este modelo está tratando de estimar una tendencia a largo plazo. Por analogía con la noción de la edad media de los datos que se utilizan para estimar el nivel local de la serie, la edad media de los datos que se utilizan para estimar la tendencia local es proporcional a 1/946, aunque no exactamente igual a eso. En este caso, resulta ser 1 / 0.006 125. Esto no es un número muy preciso en la medida en que la precisión de la estimación de 946 es realmente de 3 decimales, pero es del mismo orden general de magnitud que el tamaño de la muestra de 100 , Por lo que este modelo está promediando bastante historia en la estimación de la tendencia. La gráfica de pronóstico siguiente muestra que el modelo LES calcula una tendencia local ligeramente mayor al final de la serie que la tendencia constante estimada en el modelo SEStrend. Además, el valor estimado de 945 es casi idéntico al obtenido ajustando el modelo SES con o sin tendencia, por lo que este es casi el mismo modelo. Ahora, ¿se ven como pronósticos razonables para un modelo que se supone que está estimando una tendencia local? Si observa esta gráfica, parece que la tendencia local se ha vuelto hacia abajo al final de la serie. Lo que ha ocurrido Los parámetros de este modelo Se han estimado minimizando el error al cuadrado de las previsiones de un paso adelante, y no las previsiones a largo plazo, en cuyo caso la tendencia no hace mucha diferencia. Si todo lo que usted está mirando son errores de un paso adelante, no está viendo la imagen más grande de las tendencias sobre (digamos) 10 o 20 períodos. Con el fin de obtener este modelo más en sintonía con la extrapolación de nuestro ojo de los datos, podemos ajustar manualmente la tendencia de suavizado constante de modo que utiliza una base más corta para la estimación de tendencia. Por ejemplo, si elegimos establecer 946 0.1, la edad promedio de los datos utilizados para estimar la tendencia local es de 10 períodos, lo que significa que estamos promediando la tendencia en los últimos 20 períodos aproximadamente. Here8217s lo que el pronóstico gráfico parece si fijamos 946 0.1 mientras que mantener 945 0.3. Esto parece intuitivamente razonable para esta serie, aunque probablemente sea peligroso extrapolar esta tendencia en más de 10 periodos en el futuro. ¿Qué pasa con las estadísticas de errores? Aquí hay una comparación de modelos para los dos modelos mostrados arriba, así como tres modelos SES. El valor óptimo de 945 para el modelo SES es de aproximadamente 0,3, pero se obtienen resultados similares (con un poco más o menos de capacidad de respuesta, respectivamente) con 0,5 y 0,2. (A) Holts lineal exp. Alisamiento con alfa 0.3048 y beta 0.008 (B) Holts linear exp. Alisamiento con alfa 0.3 y beta 0.1 (C) Alisamiento exponencial simple con alfa 0.5 (D) Alisamiento exponencial simple con alfa 0.3 (E) Suavizado exponencial simple con alfa 0.2 Sus estadísticas son casi idénticas, por lo que realmente no podemos hacer la elección sobre la base De errores de pronóstico de un paso adelante en la muestra de datos. Tenemos que recurrir a otras consideraciones. Si creemos firmemente que tiene sentido basar la estimación de tendencia actual en lo que ha ocurrido durante los últimos 20 períodos, podemos hacer un caso para el modelo LES con 945 0.3 y 946 0.1. Si queremos ser agnósticos acerca de si hay una tendencia local, entonces uno de los modelos SES podría ser más fácil de explicar y también daría más pronósticos intermedios para los próximos 5 o 10 períodos. (Volver al principio de la página.) Qué tipo de tendencia-extrapolación es la mejor: horizontal o lineal La evidencia empírica sugiere que, si los datos ya han sido ajustados (si es necesario) para la inflación, puede ser imprudente extrapolar lineal a corto plazo Tendencias en el futuro. Las tendencias evidentes hoy en día pueden desacelerarse en el futuro debido a diversas causas, como la obsolescencia de los productos, el aumento de la competencia y las caídas o repuntes cíclicos en una industria. Por esta razón, el suavizado exponencial simple a menudo realiza mejor fuera de la muestra de lo que de otra manera se podría esperar, a pesar de su extrapolación de tendencia horizontal de extracción horizontal. Las modificaciones de la tendencia amortiguada del modelo de suavizado exponencial lineal también se usan a menudo en la práctica para introducir una nota de conservadurismo en sus proyecciones de tendencia. El modelo LES con tendencia amortiguada se puede implementar como un caso especial de un modelo ARIMA, en particular, un modelo ARIMA (1,1,2). Es posible calcular intervalos de confianza en torno a los pronósticos a largo plazo producidos por modelos de suavizado exponencial, al considerarlos como casos especiales de modelos ARIMA. El ancho de los intervalos de confianza depende de (i) el error RMS del modelo, (ii) el tipo de suavizado (simple o lineal) (iii) el valor (S) de la (s) constante (s) de suavizado y (iv) el número de periodos por delante que está pronosticando. En general, los intervalos se extienden más rápidamente a medida que el 945 se hace más grande en el modelo SES y se extienden mucho más rápido cuando se usa lineal en lugar de simple suavizado. Este tema se discute más adelante en la sección de modelos de ARIMA de las notas. (Volver al principio de la página.) Herramientas de cálculo Análogamente, DataFrame tiene un método cov para calcular covarianzas entre pares de la serie en el DataFrame, también excluyendo NA / valores nulos. Suponiendo que los datos faltantes faltan al azar, esto resulta en una estimación para la matriz de covarianza que es imparcial. Sin embargo, para muchas aplicaciones esta estimación puede no ser aceptable porque no se garantiza que la matriz de covarianza estimada sea positiva semi-definida. Esto podría conducir a correlaciones estimadas que tienen valores absolutos que son mayores que uno, y / o una matriz de covarianza no invertible. Ver Estimación de matrices de covarianza para más detalles. DataFrame. cov también admite una palabra clave opcional minperiods que especifica el número mínimo requerido de observaciones para cada par de columnas para tener un resultado válido. Los pesos utilizados en la ventana se especifican mediante la palabra clave wintype. La lista de tipos reconocidos son: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (necesidades beta) gaussian (necesita std) generalgaussian (necesita poder, ancho) slepian (necesita ancho). Tenga en cuenta que la ventana del vagón es equivalente a mean (). Para algunas funciones de ventana, se deben especificar parámetros adicionales: Para. sum () con un wintype. No hay normalización hecha a los pesos para la ventana. Pasar pesos personalizados de 1, 1, 1 dará un resultado diferente que pasar pesos de 2, 2, 2. por ejemplo. Al pasar un wintype en lugar de especificar explícitamente los pesos, los pesos ya están normalizados para que el mayor peso sea 1. En contraste, la naturaleza del cálculo. mean () es tal que los pesos se normalizan uno con respecto al otro. Los pesos de 1, 1, 1 y 2, 2, 2 dan el mismo resultado. Rolling nuevo tiempo en la versión 0.19.0. Nuevos en la versión 0.19.0 son la capacidad de pasar un offset (o convertible) a un método. rolling () y hacer que produzca ventanas de tamaño variable basadas en la ventana de tiempo pasada. Para cada punto de tiempo, esto incluye todos los valores anteriores que ocurren dentro del delta de tiempo indicado. Esto puede ser particularmente útil para un índice de frecuencia de tiempo no regular. Este es un índice de frecuencia regular. El uso de un parámetro de ventana entero funciona para rodar a lo largo de la frecuencia de la ventana. Especificar un desplazamiento permite una especificación más intuitiva de la frecuencia de rodadura. Utilizando un índice no regular, pero aún monótono, rodar con una ventana entera no imparte ningún cálculo especial. El uso de la especificación de tiempo genera ventanas variables para estos datos escasos. Además, ahora permitimos que un parámetro opcional en el parámetro especifique una columna (en lugar del valor predeterminado del índice) en un DataFrame. Conocimiento del tiempo Rolling vs. Resampling El uso de. rolling () con un índice basado en el tiempo es muy similar al remuestreo. Ambos operan y realizan operaciones reductivas sobre objetos de pandas indexados en el tiempo. Cuando se utiliza. rolling () con un desplazamiento. El desplazamiento es un tiempo-delta. Tome una ventana de búsqueda hacia atrás en el tiempo, y agregue todos los valores en esa ventana (incluyendo el punto final, pero no el punto de inicio). Este es el nuevo valor en ese punto en el resultado. Se trata de ventanas de tamaño variable en el espacio de tiempo para cada punto de la entrada. Obtendrá un resultado del mismo tamaño que la entrada. Cuando se utiliza. resample () con un desplazamiento. Construir un nuevo índice que es la frecuencia del desplazamiento. Para cada contenedor de frecuencia, el agregado apunta desde la entrada dentro de una ventana que mira hacia atrás en el tiempo que cae en ese contenedor. El resultado de esta agregación es la salida para ese punto de frecuencia. Las ventanas tienen un tamaño de tamaño fijo en el espacio de frecuencia. Su resultado tendrá la forma de una frecuencia regular entre el mínimo y el máximo del objeto de entrada original. Para resumir. Rolling () es una operación de ventana basada en el tiempo, mientras que. resample () es una operación de ventana basada en frecuencia. Centrar las ventanas De forma predeterminada, las etiquetas se ajustan al borde derecho de la ventana, pero una palabra clave central está disponible para que las etiquetas se puedan establecer en el centro. Funciones de ventana binaria cov () y corr () pueden calcular las estadísticas de las ventanas en movimiento sobre dos Series o cualquier combinación de DataFrame / Series o DataFrame / DataFrame. Aquí está el comportamiento en cada caso: dos Series. Calcular la estadística para el emparejamiento. DataFrame / Series. Calcular las estadísticas para cada columna del DataFrame con la serie pasada, devolviendo así un DataFrame. DataFrame / DataFrame. Por defecto calcula la estadística para los nombres de columna coincidentes, devolviendo un DataFrame. Si se pasa el argumento de palabra clave pairwiseTrue, entonces calcula la estadística para cada par de columnas, devolviendo un Panel cuyos elementos son las fechas en cuestión (consulte la siguiente sección). Computación de covarianzas y correlaciones en pares En el análisis de datos financieros y otros campos es común calcular las matrices de covarianza y correlación para una colección de series de tiempo. A menudo uno también está interesado en la movilidad-ventana covarianza y matrices de correlación. Esto se puede hacer pasando el argumento de palabra clave pairwise, que en el caso de las entradas de DataFrame producirá un Panel cuyos elementos son las fechas en cuestión. En el caso de un solo argumento de DataFrame, el argumento pairwise puede incluso omitirse: Los valores faltantes se ignoran y cada entrada se calcula usando las observaciones completas pairwise. Consulte la sección de covarianza para las advertencias asociadas con este método de cálculo de covarianza y matrices de correlación. Aparte de no tener un parámetro de ventana, estas funciones tienen las mismas interfaces que sus contrapartes de desplazamiento. Como arriba, los parámetros que aceptan son: minperiodos. El umbral de puntos de datos no nulos que se requieren. El valor predeterminado es el mínimo necesario para calcular la estadística. No se emitirán NaNs una vez que se hayan observado puntos de datos no nulos de los minperiodos. centrar. Boolean, si se deben establecer las etiquetas en el centro (por defecto es False) La salida de los métodos. rolling y. expanding no devuelve un NaN si hay al menos valores no nulos de minperiodos en la ventana actual. Esto difiere del cumsum. Cumprod. Cummax Y cummin. Que devuelven NaN en la salida dondequiera que se encuentre un NaN en la entrada. Una estadística de ventana en expansión será más estable (y menos sensible) que su contrapartida de ventana de balanceo a medida que el tamaño creciente de la ventana disminuye el impacto relativo de un punto de datos individual. A modo de ejemplo, aquí está la salida media () para el conjunto de datos de series temporales anteriores: Ventas Exponencialmente Ponderadas Un conjunto relacionado de funciones son versiones ponderadas exponencialmente de varias de las estadísticas anteriores. Se accede a una interfaz similar a. rolling y. expanding a través del método. ewm para recibir un objeto EWM. Se proporciona una serie de métodos EW (exponencialmente ponderados) en expansión: Suavizado con promedios móviles ponderados exponencialmente Un promedio móvil toma una serie cronológica ruidosa y reemplaza cada valor por el valor promedio de un vecindario sobre el valor dado. Este barrio puede consistir en datos puramente históricos, o puede estar centrado en el valor dado. Además, los valores en el vecindario pueden ponderarse usando diferentes conjuntos de pesos. Aquí hay un ejemplo de una media móvil ponderada de tres puntos, usando datos históricos, Aquí, representa la señal suavizada, y representa la serie de tiempo ruidosa. En contraste con las medias móviles simples, una media móvil ponderada exponencialmente (EWMA) ajusta un valor de acuerdo con una suma exponencialmente ponderada de todos los valores anteriores. Esta es la idea básica, esto es bueno porque usted no tiene que preocuparse por tener una ventana de tres puntos, frente a una ventana de cinco puntos, o preocuparse por la adecuación de su esquema de ponderación. Con la EWMA, las perturbaciones previas 8220 recordadas, 8221 y 8220 se olvidan lentamente, 8221 por el término en la última ecuación, mientras que con una ventana o vecindario con límites discretos, una perturbación se olvida tan pronto como sale de la ventana. Promedio de la EWMA para acomodar las tendencias Después de leer sobre EWMAs en un libro de análisis de datos, había ido adelante felizmente con esta herramienta en cada aplicación de suavizado único que me encontré. No fue hasta más tarde que me enteré de que la función EWMA es realmente sólo apropiado para datos estacionarios, es decir, datos sin tendencias o estacionalidad. En particular, la función EWMA resiste las tendencias lejos de la media actual que 8282s ya 8220seen8221. Por lo tanto, si tiene una función de ruido ruidosa que va de 0 a 1 y luego vuelve a 0, entonces la función EWMA devolverá valores bajos en el lado de subida y altos valores en el lado de bajada. Una forma de eludir esto es suavizar la señal en ambas direcciones, marchar hacia adelante, y luego marchar hacia atrás, y luego promediar los dos. Aquí, usaremos la función EWMA proporcionada por el módulo pandas. Holt-Winters Segunda Orden EWMA Y aquí está un código de Python que implementa el método de segunda orden de Holt-Winters en otra función de sombrero ruidoso, como antes. Mensajes recientes Archivos
Comments
Post a Comment