Biểu đồ phân tích số liệu theo thời gian

Một phần của tài liệu XÂY DỰNG ỨNG DỤNG PHÂN TÍCH DỰ BÁO DOANH THU DOANH NGHIỆP GOLF (Trang 46)

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)

✓ 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 x in 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 param in pdq:

for param_seasonal in 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ự đố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 numpy as np import pandas as pd

import matplotlib.pyplot as plt

from sklearn.preprocessing import MinMaxScaler from keras.preprocessing.sequence import

TimeseriesGenerator from keras.models import Sequential

from keras.layers import Dense from keras.layers import LSTM from keras.layers import Dropout from tensorflow import 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 i in 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 i in 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à cứ qua 1 lớp là có 1 dropout 0.3. Cuối cùng ta cho qua một tầng Dense với đầu ra là 1 chiều. Sử dụng hàm loss bình phương trung bình là hàm mất mát và để tối ưu hóa thuật tốn, chúng tơi sử dụng trình tối ưu hóa adam.

#dau vao 3 doan 1

n_input = 3 n_features = 1 model = Sequential() model.add(LSTM(units=50,activation='relu', input_shape=(n_input, n_features), return_sequences=True)) model.add(Dropout(0.3)) model.add(LSTM(units=50, return_sequences=True)) model.add(Dropout(0.3)) model.add(LSTM(units=50)) model.add(Dropout(0.3)) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse')

4.3.5 Huấn luyện mơ hình mạng

model.fit(x_train, y_train, epochs=500,

validation_split=0.2, verbose=1, batch_size=30) model.save('D:/CAOHOC/CODEANN/30_to_1.h5') model = keras.models.load_model('D:/CAOHOC/CODEANN/30_to_1.h5') test_output = model.predict(x_test) 4.3.6 Kết quả thử nghiệm # print(test_output) test_1 = scaler.inverse_transform(test_output) test_2=scaler.inverse_transform(y_test) plt.plot(test_1[:100], color='r') plt.plot(test_2[:100] ,color='b') plt.title("Sales Golf") plt.xlabel("STT")

plt.ylabel("Doanh thu Golf")

plt.legend(('Doanh thu dự đốn', 'Doanh thu thực tế'),loc='upper right') plt.show()

- Kết quả mơ hình LSTM như Hình 22:

Hình 22: Kết quả thư nghiệm mơ hình mạng LSTM

5.1 Kết quả dự báo

5.1.1 Kết quả xây dựng với mơ hình nhân :

Phương trình hồi quy Tt = 20.778, 56346 + 811,8253497*t căn cứ theo Bảng :

Kết quả dự báo mơ hình nhân theo Bảng 18 :

Bảng 18: Bảng kết quả mơ hình nhân

Kết quả trực quan mơ hình nhân minh họa theo Hình 23:

5.1.2 Mơ hình ARIMA

- Kết quả dự báo theo mơ hình trung bình MA theo Hình 24 :

Hình 24: Mơ hình trung bình MA ttheo tháng

- Độ lệch chuẩn trung bình biểu diễn minh họa theo Hình 25 :

Hình 25: Kết quả độ lệch chuẩn trung bình

- Kết quả mơ hình dự báo ARIMA theo Bảng 19 :

- Biêu đồ trực quan dự báo doanh thu ARIMA theo Hình 26 :

Hình 26: Hình minh họa kết quả dự báo

5.1.3 Mơ hình mạng LSTM

- Kết quả dự báo bằng hình ảnh trực quan Hình 27 :

Hình 27: Đồ thị minh họa trực quan LSTM

5.2 Bảng kết quả kiểm nghiệm doanh thu khi kiểm nghiệm mơ hình

Bảng kết quả dự báo so sánh giữa các mơ hình như Bảng 20:

Bảng 20: Bảng kết quả dự báo các mơ hình

Sai số dự

Số liệu Mơ hình Mơ hình Mơ Hình báo Mơ Sai số Sai số Quarter Year thực tế nhân ARIMA LSTM hình nhân ARIMA LSTM

1 2019 84,750 75,005 83,891 80,213 9,745 859 4,537

2 2019 77,457 71,306 81,867 79,123 6,151 -4,410 -1,666

3 2019 75,263 81,261 81,087 74,178 -5,998 -5,824 1,085

KẾT LUẬN

Ứng dùng phần mềm Excel để phân tích và dự báo với mơ hình nhân bên cạnh đó dùng ngơn ngữ lập trình python và các thư viện để phân tích và dự báo.

Ứng dụng Mơ hình nhân Yt = Tt x St với ứng dung cho kết quả nhanh chóng dễ làm và có thể dự đốn các năm tiếp theo khi có kết quả của các năm trước và dựa vào yếu tố theo màu để dự đốn chính xác các số liệu cua các quý hoặc các năm tiếp theo dễ dàng.

Ứng dụng mơ hình ARIMA để phân tích và dự báo số liệu doanh thu với tự hồi quy, trung bình, khử biến đổi theo mùa, hồi quy tuyến tính, độ lệch chuẩn, phương sai,… và các khả năng ứng dụng của mơ hình ARIMA.

Mạng LSTM là một trong những mạng thần kinh được sử dụng phân tích chuỗi thời gian. Khả năng ghi nhớ thơng tin trước đó của LSTM khiến nó trở nên lý tưởng cho các nhiệm vụ. Cho kết quả khá nhanh và khá chính xác với ứng dụng thư viện TensorFlow và các thư viện khác có từ Python.

Ứng dụng nghiên cứ với mơ hình nhân với kết quả với phương trình tuyến tính Tt = 20.778, 56346 + 811,8253497*t và sai số R2 = 0.900185312, dự đoán kết quả cho các năm tiếp theo cũng gần chính xác với số liệu thực tế.

Nghiên cứu khả năng ứng dụng của mơ hình ARIMA vào việc dự báo doanh thu Golf, mục đích tìm ra mơ hình tốt nhất cho việc dự báo doanh thu Golf.

Nghiên cứu ứng dụng mơ hình mạng LSTM phân tích số liệu và dự báo cho

kết quả nhanh và khá chính xác với ứng dụng thư viện TensorFlow kết hợp với các thư viện khác có từ ứng dụng ngơn ngữ lập trình Python

Hiện bài tốn phân tích dự báo doanh thu golf chỉ dựa trên số liệu doanh thu nên có phần chưa đánh giá tốt hoạt động của doanh nghiệp. Để phân tích và dự đốn chính xác thì cần dựa vào các chỉ tiêu như dịng tiền, tài sản, chi phí, nguồn vốn, lợi nhuận,…để có dự phân tích và dự báo chính xác hơn.

Tác giả mới dựa vào một số mơ hình tốn để dự báo như mơ hình nhân, mơ hình trung bình, mơ hình ARIMA và SARIMA kết hợp để phân tích cũng như dự báo và ứnng dụng mơ hình mạng LSTM là một phần đặc biệt của mạng RNN (Recurrent Neural Networks) để phân tích và dự báo bằng phương pháp học sâu.

Khi dùng phương pháp LSTM học nhanh hơn và phân tích kết quả và dự đốn nhanh hơn so với hồi quy Logistic và phương pháp Suport Vector Macchin chỉ mang tính chất phân loại.

DANH MỤC TÀI LIỆU THAM KHẢO

[1]Đỗ Thị Hương (2016), Phân tích báo cáo tài chính của Cơng ty TNHH thương

mại và đầu tư Xuân Anh, Luận văn Thạc sĩ Kế toán, Đại học Lao Động Xã Hội. [2]Nguyễn Văn Hn, Phạm Việt Bình (2011), Phân tích dữ liệu và dự báo kinh tế,

NXB Khoa học và kỹ thuật.

[3]Nguyễn Văn Huân, Lê Anh Tú (2015), Giải pháp xây dựng hệ thống phân tích

dữ liệu và dự báo doanh thu cho doanh nghiệp vừa và nhỏ tại Việt Nam, Tạp chí

Khoa học & Cơng nghệ, 135(05):191 – 198.

[4]Trần Văn Lý, Lê Thị Hải Yên, Nguyễn Huyền Trang, Trần Kim Yến, Bùi Minh Trung và Lâm Quốc Tồn (2016), Phân tích hồi quy xu thế và một áp dụng thú

vị, Tạp chí Khoa học Trường Đại học Cần Thơ, 45a:118-125

[5]Đinh Thị Thu Hương, Đỗ Diệu My, Vũ Văn Trường, Bùi Thu Lâm (2015), Dự

báo tỉ giá ngoại tệ với mơ hình học cộng đồng kết hợp giải thuật tiến hóa đa mục tiêu, Các cơng trình nghiên cứu, phát triển và ứng dụng CNTT-TT, V-2, Số

14.

[6]Trần Đức Minh, Trần Huy Dương, Vũ Đức Thi (2015), Một số vấn đề về dự báo

dữ liệu chuỗi thời gian, Kỷ yếu Hội nghị Quốc gia lần thứ VIII về Nghiên cứu

cơ bản và ứng dụng Công nghệ thông tin (FAIR); Hà Nội, ngày 9-10/7/2015 DOI: 10.15625/vap.2015.000182

[7]Ratnadip Adhikari, R. K. Agrawal (2003), An Introductory Study on Time Series Modeling and Forecasting.

[8]Ngô Văn Mạnh, Nguyễn Thị Hiền, Nguyễn Xuân Hoài, Đặng Văn Nam, Nguyễn Việt Huy (2020), Nâng cao hiệu năng của Deep learning trong hệ

thống tính tốn hiệu năng cao cray-xc40, DOI:

10.36335/VNJHM.2020(709).63-70

[9]Anonymous (2019), Time Series Analysis (TSA) in Python - Linear Models to GARCH , http://www.blackarbs.com/blog/time-series-analysis-in-python-linear-

models-to-garch/11/1/2016#AR=, access date: Nov 20, 2019.

[10] Mark Borysiak (2019), ARIMA and LSTM Time Series Models for Google

Trends, https://github.com/IbonGaray/Forecasting-Time-Series-Python/ blob/

master/ Forecasting%20Time%20Series.ipynb, access date: Dec 20,2019

[11] Vô danh (2020), Sử dụng mạng LSTM (Long Short Term Memory) để dự

đoán cổ phiếu, https://viblo.asia/s/su-dung-mang-lstm-long-short-term-memory-

de-du-doan-co-phieu-24lJDz06KPM, truy cập ngày: 20/01/2020

[12] Abhinav Sagar (2020), Cryptocurrency Price Prediction Using LSTM neural

network, https://github.com/abhinavsagar/Cryptocurrency-Price-Prediction

Một phần của tài liệu XÂY DỰNG ỨNG DỤNG PHÂN TÍCH DỰ BÁO DOANH THU DOANH NGHIỆP GOLF (Trang 46)

w