Простое экспоненциальное сглаживание Python

Я загрузил акцию TESLA с сайта www.nasdaq.com; и после того, как я загрузил файл CSV, я понял, что мне нужно преобразовать CSV с помощью Microsoft Excel 2016. Я использую вкладку данных; и щелкните Текст в столбцы. Заголовок теперь понятен, это: дата, закрытие, объем, открытие, максимум, минимум. Пожалуйста, посмотрите файл csv здесь. LinK: https://drive.google.com/open?id=1cirQi47U4uumvgs14g6vOmgs / а>

Preview (The CSV data is from 02/02/2017 until 02/02/2018):

 1. date        | close  |  volume  | open   | high   | low   |
 2. 02/02/2018  | 343.75 |  3696157 | 348.44 | 351.95 | 340.51|
 3. 01/02/2018  | 349.25 |  4187440 | 351.00 | 359.66 | 348.63|

Для меня задача состоит в том, чтобы создать точку данных за каждый месяц как можно ближе к первому числу месяца. Я фильтрую в файле Excel, и это данные, которые я получаю.

 - date | close
 - 01/02/2018 | 349.25
 - 02/01/2018 | 320.53
 - 01/12/2017 | 306.53
 - 01/11/2017 | 321.08
 - 02/10/2017 | 341.53
 - 01/09/2017 | 355.40
 - 01/08/2017 | 319.57
 - 03/07/2017 | 352.62
 - 01/06/2017 | 340.37
 - 01/05/2017 | 322.83
 - 03/04/2017 | 298.52
 - 01/03/2017 | 250.02
 - 02/02/2017 | 251.55

Если я создаю точку данных, она становится такой, которая нужна для создания графика. Отображение графика исходных данных и «сглаженных данных» с простым экспоненциальным сглаживанием или иногда это называется однократным экспоненциальным сглаживанием. Это больше о прогнозировании временных рядов, в котором используется python-ggplot.

 - x | y
 - 01/02/2018 | 349.25
 - 02/01/2018 | 320.53
 - 01/12/2017 | 306.53
 - 01/11/2017 | 321.08
 - 02/10/2017 | 341.53
 - 01/09/2017 | 355.40
 - 01/08/2017 | 319.57
 - 03/07/2017 | 352.62
 - 01/06/2017 | 340.37
 - 01/05/2017 | 322.83
 - 03/04/2017 | 298.52
 - 01/03/2017 | 250.02
 - 02/02/2017 | 251.55

Программа на Python, которую я написал:

# -*- coding: utf-8 -*-

"""
Created on Sat Feb  3 13:20:28 2018

@author: johannesbambang
"""

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

my_data = pd.read_csv('C:\TESLA Exponential Smoothing\TSLA.csv',dayfirst=True,index_col=0)
my_data.plot()

plt.show()

Мой вопрос в том, что мне следует улучшить в моей программе на Python? Любая помощь будет отличной. Заранее спасибо.


person Johannes Bambang Wirawan    schedule 04.02.2018    source источник
comment
Вы спрашиваете, как применить сглаживание к вашему сюжету?   -  person Bhushan Pant    schedule 04.02.2018
comment
Я пытаюсь понять, как сделать простое экспоненциальное сглаживание в Python.   -  person Johannes Bambang Wirawan    schedule 07.02.2018


Ответы (2)


Используйте простое экспоненциальное сглаживание в Python.

Прогнозы рассчитываются с использованием средневзвешенных значений, где веса уменьшаются экспоненциально по мере поступления наблюдений из более далекого прошлого, наименьшие веса связаны с самыми старыми наблюдениями:

'''simple exponential smoothing go back to last N values
 y_t = a * y_t + a * (1-a)^1 * y_t-1 + a * (1-a)^2 * y_t-2 + ... + a*(1-a)^n * 
y_t-n'''


def exponential_smoothing(panda_series, alpha_value):
    ouput=sum([alpha_value * (1 - alpha_value) ** i * x for i, x in 
                enumerate(reversed(panda_series))])
    return ouput
panda_series=mydata.y
smoothing_number=exponential_smoothing(panda_series,0.6) # use a=0.6 or 0.5 your choice, which gives less rms error
estimated_values=testdata.copy() # replace testdata with your test dataset
estimated_values['SES'] = smoothing_number
error=sqrt(mean_squared_error(testdata.y, estimated_values.SES))
print(error)
person Yogesh Chandra    schedule 08.02.2018
comment
Привет, Йогеш, Спасибо за помощь. Я последовал твоему совету и изменил набор данных. Кажется, что набор данных, который был загружен на диск Google, был неправильным, потому что я преобразовал из csv в excel; а затем сохранил его в csv. Я извлек из этого ценный урок в будущем. Итак, я решил снова загрузить исторические цитаты Tesla с Nasdaq. - person Johannes Bambang Wirawan; 10.02.2018

А как насчет статистических моделей ExponentialSmoothing?

В пакете statsmodels есть множество инструментов для анализа временных рядов на Python.

from statsmodels.tsa.api import ExponentialSmoothing

Также ознакомьтесь с этой статьей об анализе временных рядов в Python:

https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/

person erickfis    schedule 30.07.2018
comment
Просто как дополнение: exp = ExponentialSmoothing(data) exp_model = exp.fit(smoothing_level=0.1) result = exp_model.fittedvalues - person chAlexey; 22.08.2018