Xây dựng quy trình phân tích dự báo cho bài toán doanh thu Golf

Một phần của tài liệu uftai-ve-tai-day27956 (Trang 28)

3.3.1 Xây dựng dự báo theo chuỗi thời gian với mô hình trung bình nhân

Chuỗi thời gian là một chuỗi giá trị được ghi nhận theo thời gian (ngày, tuần, tháng, quý, năm).

Có nhiều phương pháp dự báo với chuỗi thời gian, ở đây chỉ trình bày phương pháp phân rã (Decomposition).

Theo phương pháp này, chuỗi thời gian có thể được mô tả theo dạng tích như sau: Yt = St x Tt x It

Trongđó:

+ Yt là giá trị quan sát (observed value) + St là giá trị quan sát (seasonality) + Tt là yếu tố xu hướng (trend)

Xây dựng số liệu dự báo doanh thu golf theo năm và quý từ quý 1 năm 2003 đến quý 4 năm 2018, với bảng số liệu Bảng 3.

Bảng 3: Bảng số liệu doanh thu golf theo từng quý qua năm

Quy trình thực hiện dự báo mô hình trung bình nhân theo Hình 2: Xây dựng số liệu

phân tích dự báo

Tạo các tham số

Làm mịn số liệu và tính các giá trị tham số

Xác định phương trình hồi quy

Kết quả phân tích và dự báo

3.3.2 Xây dựng dữ liệu ứng dụng dự báo theo mô hình ARIMA

Xây dựng số liệu doanh thu Golf từ tháng 01 năm 2003 đến 03 năm 2019. Số liệu doanh thu theo tháng được xây dựng dưới dạng file CSV, số liệu xây dựng trên đơn vị tính là 1.000.000 đồng Việt Nam. Bảng số liệu doanh thu qua các tháng được thể hiện qua Bảng 4 :

Quy trình thực hiện và phân tích dự báo bằng mô hình ARIMA Hình 3: Dữ liệu đầu vào

Xác định mô hình thử nghiệm

Ước lượng tham số

Kiểm định chuẩn đoán

Dự báo

3.3.3 Xây dựng ứng dụng dữ liệu theo mô hình LSTM

Xây dựng số liệu doanh thu Golf theo tháng từ 01 năm 2003 đến tháng 12 năm 2018 với bảng số liệu Bảng 5:

Bảng 5: Bảng số liệu doanh thu golf từ tháng 01 năm 2003 đến 12 năm 2018

Xây dựng quy trình phân tích và huấn luyện mô hình LSTM như Hình 4: Dữ liệu đầu vào Phân tích xử lý

Xây dựng mô hình mạng LSTM

Kết quả phân tích

dự báo Huấn luyện

CHƯƠNG 4 – XÂY DỰNG ỨNG DỤNG THỬ NGHIỆM

4.1 Xây dựng dự báo theo chuỗi thời gian với mô hình trung bình nhân nhân

4.1.1 Xây dựng dữ liệu dự báo :

- Biểu đồ biểu diễn số liệu doanh thu golf theo quý qua các năm theo như Hình 5 :

100,000 80,000 60,000 40,000 20,000 0

Doanh thu golf Yt (1.000.000)

12341234123412341234123412341234123412341234123412341234123412341

2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019

Yt (1.000.000)

Hình 5: Biểu đồ doanh thu gofl

4.1.2 Làm mịn số liệu:

Bằng cách tính trung bình cộng như số liệu Bảng 6:

- Tính MA4 : là trung bình cộng với n số hạng của số liệu doanh thu golf Yt. Ta áp dụng công thức : MA4= 1 ∑ = 1 ( Yt1 + Yt1 + …+ Ytn). n =1 n Ứng dụng n=4, ta có :

MA4(1) = 1/4 * (Yt1+Yt2+Yt3+Yt4) = (26.374+19.366+18.395+21.955) / 4 = 21.378 MA4(2) = 1/4 * (Yt2+Yt3+Yt4+Yt5) = (19.366+18.395+21.955+23.343) / 4 = 20.765 MA4(3) = 1/4 * (Yt3+Yt4+Yt5+Yt6) = (18.395+21.955+23.343+21.651) / 4 = 21.336

---

MA4(64) = 1/4 *( Yt62+Yt63+Yt64+Yt65) = (73.338+71.744+83.934+84.750) / 4 = 78.442

- Tính CMA4 hay Tt : là trung bình cộng với n số hạng của MA4 :

Ta áp dụng công thức : CMA4=n1 ∑ =4 4 =n1(MA4 *t3 +…+ MA4*tn).

- Tương tự ta có kết quả như Bảng 7 :

4.1.3 Xác định St:

- Tính St x It =Yt / CMA4.

- Ta có : St4 x It4 = 21.955 / 21.144 = 1,03838583 - Bảng kết quả Bảng 8 cho các thời gian t tiếp theo :

Bảng 8: Bảng số liệu St x It

Tính St cho từng quý với hàm trung bình cộng có điều kiện theo quý theo Bảng 9:

Bảng 9: Bảng số liệu St theo quý

- Hiệu chỉnh St theo từng quý theo Bảng 10:

- Khử tính mùa vụ: Ta khử mùa vụ bằng cách lấy Yt / St, ta thu được kết quả như Bảng 11:

Bảng 11: Bảng số liệu kết quả khử mùa vụ

4.1.4 Xác định phương trình hồi quy:

- Thực hiện hồi quy Tt theo thời gian t, với công thức hồi quy Tt = bt +a: - Ta có bảng kết quả hồi quy như Bảng 12:

- Intercept là hệ số a hay còn gọi là trung độ gốc: a = 20.778,56346. - X Variable 1 là hệ số độ dốc: b= 811,8253497.

- Adjusted R Square là hệ số xác định: R2 = 0.900185312, với hệ R2 càng gần 1 nên mô hình được đánh giá là tốt.

- Significance F là độ tin cậy của kiểm định: F=1,91189E-33 - P-Value: 3,6703E-24

- Phương trình hồi quy dự báo của mô hình như sau: Tt = a + bt = 20.778, 56346 + 811,8253497*t

Dựa vào phương trình hồi quy : Tt = 20.778, 56346 + 811,8253497*t, ta có được số liệu dự báo.

- Tính Tt: Thu được kết quả như Bảng 13:

4.1.4 Kết quả dự báo

- Thực hiện dự báo với công thức : Yt = Tt x St

- Thực hiện tính Yt, ta thu được kết quả như Bảng 14 :

Bảng 14: Bảng kết quả Yt = St * Tt

-Ta thực hiện dự báo cho quý 2, 3, 4 năm 2019, vớ kết quả dự báo như Bảng 15:

- Tiếp tục dự báo từ năm 2020 đến năm 2026, có bảng kết quả Bảng 16:

Bảng 16: Bảng kết quả dự báo quý năm 2020 đến 2026

- Biểu đồ minh họa của quá trình thực hiện mô hình dự báo được thể hiện như Hình 6 :

4.2 Xây dựng ứng dụng dự báo theo mô hình ARIMA

4.2.1 Xây dựng chương trình phân tích và dự báo dự báo doanh thu hiện thực bằng Python thu hiện thực bằng Python

4.2.1.1 Khai báo thư viện và xử lý số liệu :

- Khai báo thư viện :

# coding=utf-8 import warnings import itertools import pandasas pd import numpy as np import statsmodels.api as sm import matplotlib.pyplot as plt plt.style.use('bmh')

import statsmodels.api as sm import

statsmodels.tsa.apias smt import

statsmodels.formula.api as smf

from statsmodels.graphics.tsaplotsimport plot_acf

from statsmodels.graphics.tsaplotsimport plot_pacf

from statsmodels.tsa.stattoolsimport adfuller

from statsmodels.tsa.seasonalimport seasonal_decompose

from statsmodels.tsa.ar_model import AR

from statsmodels.tsa.arima_modelimport ARMA, ARIMA

from statsmodels.tsa.statespace.sarimaximport

SARIMAX from mathimport sqrt ,[8]

Khai báo đường dẫn file CSV và tạo datafarm [9],[10]:

df =

pd.read_csv('d:\caohoc\CODELUANVAN\ARIMA_Yt.csv')

dates = pd.date_range(start='2003-01-01', freq='MS',

periods=len(df))

# Tạo thời gian dữ liệu từ file csv

import calendar

df['Month'] = dates.month

df['Month'] = df['Month'].apply(lambda x: calendar.month_abbr[x])

df['Year'] = dates.year

# Xóa file dữ liệu và tạo lại data

df.drop(['Month-Year'], axis=1, inplace=True)

df.rename(columns={'Sales_Yt':'Golf-Sales'}, inplace=True)

df = df[['Month', 'Year', 'Golf-Sales']]

# Tạo dataframe, Set time-series dataframe

df.set_index(dates, inplace=True)

df2 = df['Golf-Sales']

print(df)

- Vẽ biểu đồ với số liệu doanh thu Golf:

# Tạo biểu đồ số liệu ban đầu

df2.plot(figsize=(15, 6))

plt.ylabel('Doanh thu golf theo tháng qua các năm')

plt.xlabel('Thời gian từ 01-2003 đến 03-2019')

plt.title('Doanh thu golf đơn vị tính 1.000.000 vnđ')

plt.show()

- Biểu đồ doanh thu golf như Hình 7 :

Hình 7: Biểu đồ minh họa doanh thu golf theo số liệu thực

4.2.1.2 Xây dựng các mô hình trung bình (Moving Average):

- Xây dựng mô hình dự báo theo MA với trung bình theo 4, 6, 8, 12 tháng qua các năm.

# Trung bình tháng 4, 6, 8, 12

fig, axes = plt.subplots(2, 2, sharey=False, sharex=False) fig.set_figwidth(16)

fig.set_figheight(8)

# Trung bình 4 tháng

axes[0][0].plot(df2.index, df2, label='Số liệu ban đầu (Original)') axes[0][0].plot(df2.index, df2.rolling(window=4).mean(), label='Trung bình 4 tháng')

axes[0][0].set_xlabel("Năm 2003 đến 2018")

axes[0][0].set_ylabel("Doanh thu golf 2003 đến 2018 ") axes[0][0].set_title(" Trung bình 4 tháng (4MA)")

# Trung bình 6 tháng

axes[0][1].plot(df2.index, df2, label='Số liệu ban đầu (Original)') axes[0][1].plot(df2.index, df2.rolling(window=6).mean(), label='Trung bình 6 tháng')

axes[0][1].set_xlabel("Năm 2003 đến 2018")

axes[0][1].set_ylabel("Doanh thu golf 2003 đến 2018") axes[0][1].set_title("Trung bình 6 tháng (6MA)")

axes[0][1].legend(loc='best')

# Trung bình 8 tháng

axes[1][0].plot(df2.index, df2, label='Số liệu ban đầu (Original)') axes[1][0].plot(df2.index, df2.rolling(window=8).mean(), label='Trung bình 8 tháng')

axes[1][0].set_xlabel("Năm 2003 đến 2018")

axes[1][0].set_ylabel("Doanh thu golf 2003 đến 2018") axes[1][0].set_title(" Trung bình 8 tháng (8MA)") axes[1][0].legend(loc='best')

# Trung bình 12 tháng

axes[1][1].plot(df2.index, df2, label='Số liệu ban đầu (Original)') axes[1] [1].plot(df2.index, df2.rolling(window=12).mean(), label='Trung bình 12 tháng')

axes[1][1].set_xlabel("Năm 2003 đến 2018")

axes[1][1].set_ylabel("Doanh thu golf 2003 đến 2018") axes[1][1].set_title("Trung bình 12 tháng (12MA)") axes[1][1].legend(loc='best')

plt.tight_layout() plt.show()

- Kết quả của mô hình dự báo theo 4, 6, 8,12 Hình 8:

- Độ lệch chuẩn và đường trung bình của 12 tháng :

Xây dựng code độ lệch trung bình :

# Độ lệch trung bình và độ lệch chuẩn (Rolling Mean & Standard Deviation)

rolmean = y.rolling(window=12).mean() rolstd = y.rolling(window=12).std() #Plot

rolling statistics:

orig = plt.plot(y, label='Dữ liệu gốc (Original)')

mean = plt.plot(rolmean, label='Độ lệch trung bình Mean')

std = plt.plot(rolstd, label ='Độ lệch chuẩn Std')

plt.legend(loc='best')

plt.title('Độ lệch trung bình và độ lệch chuẩn')

plt.show()

Kết quả độ lệch chuẩn trung bình 12 tháng theo Hình 9 :

Hình 9: Kết quả dự báo trung bình MA

- Thử nghiệm (Dickey –Fuller Test) :

Xây dựng đoạn code thử nghiệm :

# Perform Dickey-Fuller test: (Mô hình Test Dickey)

from statsmodels.tsa.stattoolsimport adfuller

print('Results of Dickey-Fuller Test:')

dftest = adfuller(df2, autolag='AIC') dfoutput =

pd.Series(dftest[0:4], index=['Test Statistic','p-

value', '#lags Used', 'Giá trị Observations Used'])

dfoutput['Critical Value (%s)'%key] = value

print(dfoutput)

Kết quả thử nghiệm Dickey - Fuller Test với P- Value : 0.927364 và giá trị dự thử nghiệm như sau :

Results of Dickey-Fuller Test: Test Statistic -0.286720

P-value 0.927364

#lags Used 13.000000 Giá trị Observations Used 181.000000 Critical Value (1%) -3.467005 Critical Value (5%) -2.877644 Critical Value (10%) -2.575355 - Tính thời vụ và phân rã doanh thu Golf theo tháng :

Xây dựng code phân rã doanh thu theo tháng

# Dữ liệu doanh thu Golf hàng tháng phân loại theo năm 2003 đến 2019

year_sales = pd.pivot_table(df, values ="Golf-Sales", columns =

"Month", index ="Year")

year_sales = year_sales[['Jan','Feb','Mar', 'Apr','May', 'Jun', 'Jul',

'Aug', 'Sep','Oct', 'Nov','Dec']] print(year_sales) year_sales.boxplot()

Biểu đồ phâ tích kết quả phân rã doanh thu theo tháng theo Hình 10:

- Phân rã doanh thu theo hồi quy tuyến tính theo : Xu hướng, mùa, Random

Phân rã doanh thu theo thời gian

# Phân rã dữ liệu theo cấp số nhân decomposition = sm.tsa.seasonal_decompose(df2,

model='multiplicative') fig = decomposition.plot()

fig.set_figwidth(12)

fig.set_figheight(8)

fig.suptitle('Phân tích số liệu cấp số nhân theo thời gian

(Multiplicative time series)') plt.show()

Kết quả theo biểu đồ phân tích số liệu theo thời gian theo Hình 11:

4.2.1.3 Xây dựng mô hình ARIMA kết hợp

Xây dựng mô hình ARIMA sự kết hợp của 3 phần gồm AR (Auto Regressive), I (Integrated), MA (Moving Average). Ký hiệu cho mô hình ARIMA(p,d,q). Các ký hiệu p, d và q là ứng với từng phần AR, I và MA.

Xây dựng với công thức với I (Integrated): Xây dựng thử nghiệm với không có sự khác biệt d = 0, có sự khác biệt d = 1, … Không có sự khác biệt, d = 0: Y't = Yt

Có sự khác biệt thứ 1 với, d = 1: Y' t = Yt – Y t-1

Sự khác biệt thứ 2 với, d = 1: Y' t = Yt – Y t-1 - (Y t-1 - Y t- 2) = Y t - 2 * Y t-1 + Y t-2 - Xây dựng dòng lệnh phân tích sự khác biệt với cùng một số liệu.

# Doanh thu Golf theo mô hình doanh thu và 1 khác

fig, axes = plt.subplots(1, 2, sharey=False, sharex=False)

fig.set_figwidth(12)

fig.set_figheight(4)

axes[0].plot(df.index, df['Golf-Sales'])

axes[0].set_xlabel("Year")

axes[0].set_ylabel("Goft-Sales")

axes[0].set_title("Doanh thu Golf")

axes[1].plot(df.index, df['Golf-Sales'].diff(periods=1))

axes[1].set_xlabel("Year")

axes[1].set_ylabel("Differenced Doanh thu Golf ")

axes[1].set_title("1$^{st}$ Differenced Doanh thu Golf")

plt.tight_layout() plt.show()

- Biểu đồ doanh thu và kết quả khác biệt 1 theo Hình 12:

- Xây dựng doanh thu loại bỏ xu hướng:

# Loại bỏ xu hướng 1st Differencing (d=1) | Yt′=Yt−Yt−1

plt.figure(figsize=(10, 5)) plt.plot(df2.diff(periods=1)) plt.xlabel('Năm (Year)')

plt.ylabel('Doanh thu Golf (Golf Sales)')

-Biểu đồ donah thu loại bỏ xu hướng như Hình 13:

Hình 13: Biểu đồ doanh thu loại bỏ xu hướng

- Xây dựng số liệu cố định phương sai, phương trình sau đây biến đổi Log của dữ liệu doanh thu Golf: Ytnew

= log10(Yt)

# Ytnew =log10(Yt)

plt.figure(figsize=(10, 5)) plt.plot(np.log10(df2))

plt.xlabel('Year') plt.ylabel('Log

(Doanh thu Golf)')

-Biểu đồ biến đổi Log của doanh thu như Hình 14:

- Xây dựng số liệu cố định phương sai với sự khác biệt d = 1 với phương trình biến đổi Log của dữ liệu doanh thu Golf: Ytnew = log10(Yt) - log10(Yt -1)

# Ytnew=log10(Yt)−log10(Yt−1) với d=1

plt.figure(figsize=(10, 5))

plt.plot(np.log10(df2).diff(periods=1)) plt.xlabel('Year')

plt.ylabel('Differenced Log Yt - Yt -1 (Doanh thu Golf)')

- Biểu đồ biến đổi Log khác 1 như Hình 15:

Hình 15: Biểu đồ biến đổi với Log khác 1

- Vẽ sơ đồ ACF và PACF để xác định mô hình AR và MA tiềm năng:

Xây dựng dòng lệnh của chương trình tạo sơ đồ hệ số tự tương quang (ACF) và tương quan một phần (PACF) để xác định các mẫu ổn định trong dữ liệu:

# same as ts_log_diff = ts_log - ts_log.shift(periods=1)

df2_log = np.log10(df2) df2_log.dropna(inplace=True)

df2_log_diff = df2_log.diff(periods=1)

df2_log_diff.dropna(inplace=True)

fig, axes = plt.subplots(1, 2, sharey=False,

sharex=False)

fig.set_figwidth(12) fig.set_figheight(4)

smt.graphics.plot_acf(df2_log_diff, lags=30, ax=axes[0],

alpha=0.5)

smt.graphics.plot_pacf(df2_log_diff, lags=30, ax=axes[1],

alpha=0.5) plt.tight_layout()

Sơ đồ hệ số tự tương quan (ACF) và một phần (PACF) như Hình 16:

Hình 16: Sơ đồ tự tương quan (AFC) và (PACF)

4.2.1.4 Xác định mô hình ARIMA phù hợp nhất

- Để phù hợp dữ liệu doanh thu Golf theo chuỗi thời gian với mô hình ARIMA theo mùa ta xác định các gía trị của mô hình ARIMA (p, d, q) (P, D, Q) để tối ứu hóa số liệu quan tâm AIC hoặc BIC. Ta gắn kết mô hình ARIMA với chức SARIMAX đánh giá các điểm tốt nhất cảu AIC, BIC.

- Xây dựng các dòng lệnh mô hình:

# Mô hình SARIMAX

p = d = q = range(0, 2)

pdq = list(itertools.product(p, d, q))

seasonal_pdq = [(x[0], x[1], x[2], 4)for xin list(itertools.product(p, d, q))] print('Mô hình ARIMA theo mùa:')

print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[1])) print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[2])) print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[3])) print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[4]))

for paramin pdq:

for param_seasonalin seasonal_pdq:

try: mod = sm.tsa.statespace.SARIMAX(df2, order=param, seasonal_order=param_seasonal, enforce_stationarity=False, enforce_invertibility=False)

results = mod.fit()

print('Best ARIMA{}x{}12 - AIC:{}'.format(param, param_seasonal, results.aic))

except: continue mod = sm.tsa.statespace.SARIMAX(df2, order=(1, 1, 1), seasonal_order=(1, 1, 1, 4), enforce_stationarity=False, enforce_invertibility=False) results = mod.fit() print(results.summary().tables[1])

- Mô hình ARIMA theo mùa: SARIMAX: (0, 0, 1) x (0, 0, 1, 4) SARIMAX: (0, 0, 1) x (0, 1, 0, 4) SARIMAX: (0, 1, 0) x (0, 1, 1, 4) SARIMAX: (0, 1, 0) x (1, 0, 0, 4) - Mô hình ARIMA tốt nhất: ARIMA (1, 1, 1) x (1, 1, 1, 4) 4 - AIC: 751.7326182697827

- Dự đoán doanh thu bằng mô hình ARIMA phù hợp nhất như Hình 17:

- Các sai số dự báo MSE, RMSE:

# MSE The Mean Squared Error of our forecasts is

y_forecasted = pred.predicted_mean y_truth = y['2018-01-01':]

mse = ((y_forecasted - y_truth) ** 2).mean()

print(' MSE of our forecasts {}'.format(round(mse, 2))) # RMSE The Root Mean Squared Error of

print('RMSE our forecasts is {}'.format(round(np.sqrt(mse), 2)))

MSE là: 3.23 RMSE là: 1.8

- Vẽ sơ đồ Log của AFC và PACF với ARIMA (1, 1, 1) x (1, 1, 1, 4) 4 - AIC: 751.7326182697827

results.plot_diagnostics(figsize=(16, 8)) plt.show()

4.2.1.5 Dự báo doanh thu Golf

- Dự báo trước 1 bước:

## Dự báo

pred = results.get_prediction(start=pd.to_datetime('2018-01-01'), dynamic=False)

pred_ci = pred.conf_int()

ax = y['2003':].plot(label='Quan sát (observed)')

pred.predicted_mean.plot(ax=ax, label='Dự báo trước 1 bước (One- step ahead Forecast)', alpha=.7, figsize=(14, 7))

ax.fill_between(pred_ci.index, pred_ci.iloc[:, 0],

pred_ci.iloc[:, 1], color='k', alpha=.2) ax.set_xlabel('Year')

ax.set_ylabel('Doanh thu Golf (Golf Sales)') plt.legend()

plt.show()

-Kết quả dự báo trước 1 bước như Hình 19:

- Dự báo doanh thu Golf trong vòng 10 năm tiếp theo

# Dự báo tiếp

pred_uc = results.get_forecast(steps=100) pred_ci = pred_uc.conf_int()

ax = y.plot(label='Quan sát (observed)', figsize=(14, 7))

pred_uc.predicted_mean.plot(ax=ax, label='Dự báo (Forecast)') ax.fill_between(pred_ci.index,

pred_ci.iloc[:, 0],

pred_ci.iloc[:, 1], color='k', alpha=.25) ax.set_xlabel('Date')

ax.set_ylabel('Doanh thu Golf ( Golf Sales') plt.legend()

plt.show()

-Kết quả dự báo doanh thu trong vòng 10 năm tiếp theo như Hình 20:

4.3 Xây dựng ứng dụng dự báo theo mô hình mạng Long short-term memory (LSTM) term memory (LSTM)

4.3.1 Khai báo thư viện

Khai báo thư viện

import numpyas np

import pandasas pd

import matplotlib.pyplotas plt

from sklearn.preprocessingimport MinMaxScaler

from keras.preprocessing.sequenceimport

TimeseriesGenerator from keras.modelsimport Sequential

from keras.layersimport Dense

from keras.layersimport LSTM

from keras.layersimport Dropout

from tensorflowimport keras

import warnings

warnings.filterwarnings("ignore") [11] Khai báo dữ liệu ban đầu

data = pd.read_csv('D:\CAOHOC\CODEANN\ARIMA2_Yt.csv') plt.plot(data.Sales_Yt.values, color='orange', label='Doanh thu Golf') plt.title('Doanh thu Golf 1.000.000 vnđ')

plt.xlabel('Thời gian [Month]') plt.ylabel('Doanh thu Sales Golf') plt.legend(loc='best')

plt.show()

Biểu đồ số liệu ban đầu như Hình 21 :

4.3.2 Xây dựng số liệu Dataset

Xây dựng tập số liệu traning [12]

data_end = int(np.floor(0.8*(data.shape[0]))) train = data[0:data_end]['Sales_Yt']

train =train.values.reshape(-1)

test = data[data_end:]['Sales_Yt'].values.reshape(-1) date_test = data[data_end:]['Year'].values.reshape(-1)

Xây dựng tập số liệu kiểm thử ( dữ liệu Test)

# xây dựng bộ dữ liệu test

def get_data(train,test,time_step,num_predict,Year): x_train= list() y_train = list() x_test = list() y_test = list() date_test= list()

for iin range(0,len(train) - time_step - num_predict): x_train.append(train[i:i+time_step])

y_train.append(train[i+time_step:i+time_step+num_predict])

for iin range(0, len(test) - time_step - num_predict): x_test.append(test[i:i+time_step])

y_test.append(test[i+time_step:i+time_step+num_predict]) date_test.append(Year[i+time_step:i+time_step+num_predict])

return np.asarray(x_train), np.asarray(y_train), np.asarray(x_test), np.asarray(y_test), np.asarray(date_test)

x_train, y_train, x_test, y_test, date_test = get_data(train,test,3,1, date_test)

4.3.3 Xử lý số liệu

Xử lý tập số liệu Traning

# dua ve 0->1 cho tap train

scaler = MinMaxScaler()

x_train = x_train.reshape(-1,3)

x_train = scaler.fit_transform(x_train) y_train = scaler.fit_transform(y_train)

# dua ve 0->1 cho tap test

x_test = x_test.reshape(-1,3)

x_test = scaler.fit_transform(x_test) y_test = scaler.fit_transform(y_test)

# Reshape lai cho dung model

x_train = x_train.reshape(-1,3,1) y_train = y_train.reshape(-1,1)

#reshape lai cho test

x_test = x_test.reshape(-1,3,1) y_test = y_test.reshape(-1,1) date_test = date_test.reshape(-1,1)

4.3.4 Xây dựng mô hình mạng LSTM

Bước đầu tiên khởi tạo lớp Sequential. Đây sẽ là lớp mô hình và sẽ thêm các lớp LSTM, Dropout và Dense cho mô hình này. Thêm vào 3 lớp LSTM liên tiếp và

Một phần của tài liệu uftai-ve-tai-day27956 (Trang 28)

Tải bản đầy đủ (DOC)

(63 trang)
w