Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
1,5 MB
Nội dung
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM ĐỒ ÁN ĐỀ TÀI: Tìm hiểu cơng cụ dự báo Prophet Giảng viên hướng dẫn: ThS Nguyễn Công Hoan Lớp: SE122.L11.PMCL Sinh viên thực hiện: Phan Huỳnh Minh Duy 17520405 LỜI CẢM ƠN Trong suốt thời gian từ bắt đầu thực đồ án, em nhận quan tâm, giúp đỡ quý thầy cơ, gia đình bạn bè Em xin chân thành cảm ơn thầy Nguyễn Công Hoan trực tiếp hướng dẫn, giúp đỡ kiến thức, tài liệu cách thực để hoàn thành đề tài Mặc dù có nhiều cố gắng suốt q trình thực hiện, song cịn có mặt hạn chế, sai sót Em mong nhận ý kiến đóng góp dẫn thầy bạn để đề tài hoàn thiện Xin trân trọng cảm ơn! Sinh viên thực Phan Huỳnh Minh Duy Tp Hồ Chí Minh, ngày 08 tháng 01 năm 2021 1|Trang NHẬN XÉT CỦA GIẢNG VIÊN 2|Trang MỤC LỤC Chương 1: Giới thiệu chung 1.1 Lý chọn đề tài 1.2 Mục tiêu 1.3 Đối tượng nghiên cứu Chương 2: Kiến thức tảng 1.1 Tổng quan Time-series 1.2 Thành phần Time-series: 1.3 Đánh giá lỗi: 13 1.4 Ứng dụng Time-series Data Time-series Forecasting: 14 Chương 3: Công cụ dự báo Prophet 15 1.1 Tổng quan Facebook Prophet: 15 1.2 Yêu cầu cài đặt: 17 1.3 Tìm hiểu mã nguồn Prophet: 19 1.4 Thực dự đoán Prophet: 25 Chương 4: Kết luận 38 Chương 5: Một số thuật ngữ báo cáo 39 Chương 6: Tài liệu tham khảo 39 3|Trang Chương 1: Giới thiệu chung 1.1 Lý chọn đề tài Hiện nay, công nghệ phát triền với tốc độ vượt bậc trở thành phần thiết yếu sống Nhờ vào cơng nghệ, truy cập nhanh chóng đến nhiều lĩnh vực đời sống, giúp công việc trở nên dễ dàng tiện lợi Dựa yêu cầu người đến việc dự đoán lĩnh vực đời sống, thuật tốn cơng cụ để dự đốn thiết bị cơng nghệ sử dụng thường xuyên phát triển Chẳng hạn dự đoán biến động chứng khoán, dự đoán thời tiết, dự đốn lượng truy cập trang web… Đó lý đời công cụ dự báo Prophet, cơng cụ tìm hiểu đề tài 1.2 Mục tiêu Hiểu kiến thức Time-series Data Áp dụng Time-series Data để thực Time-series Forecasting Tìm hiểu áp dụng công cụ Facebook Prophet 1.3 Đối tượng nghiên cứu Time-series Data & Time-series Forecasting Cơng cụ tìm hiểu: Facebook Prophet Ngôn ngữ: Python 4|Trang Chương 2: Kiến thức tảng 1.1 Tổng quan Time-series Time-series Data: chuỗi điểm liệu, thu thông qua phép đo lặp lại theo thời gian Time-series Data có loại chính: - Thơng thường (Regular - Metrics): liệu ghi lại theo khoảng thời gian - Bất thường (Irregular – Events): liệu ghi lại có kiện biến động bất thường 5|Trang Ví dụ 1: Time-series Data Nhiệt độ ngày, điểm liệu đo cách đồng hồ Đây liệu dạng thơng thường Ví dụ 2: Time-series Data biến động việc sử dụng ổ đĩa, điểm liệu đo cách tiếng đồng hồ Đây liệu dạng thơng thường 6|Trang Ví dụ 3: Time-series Data log hệ thống, điểm liệu ghi lại có lệnh gọi thực Đây liệu dạng bất thường Ví dụ 4: Time-series Data lần login tài khoản, liệu ghi lại có phiên đăng nhập Đây liệu dạng bất thường 7|Trang Time-series Analysis: dựa vào Time-series có thực phân thích thống kê thơng số Time-series Forecasting: sử dụng yếu tố thành phần Time-series để thực dự đoán trước giá trị đối tượng khoảng thời gian định tương lai Hiện có nhiều mơ hình thực Time-series Forecasting Tùy theo đối tượng cần theo dõi dự đốn mà kết loại mơ hình khác Một số mơ hình tiêu biểu có: Autoregressive – AR: sử dụng giá trị trước làm đầu vào cho phương trình hồi quy để dự đoán giá trị yt=c+ϕ1yt−1+ϕ2yt−2+⋯+ϕpyt−p+εt Moving Average – MA: thay sử dụng giá trị trước đó, mơ hình sử dụng lỗi dự đoán (εt) để dự đoán giá trị yt=c+εt+θ1εt−1+θ2εt−2+⋯+θqεt−q Autoregressive Integrated Moving Average – ARIMA: kết hợp AR MA có vài thay đổi để tách biệt với chúng y′t=c+ϕ1y′t−1+⋯+ϕpy′t−p+θ1εt−1+⋯+θqεt−q+εt Decomposable: mơ hình dạng phân rã, sử dụng thành phần để dự đốn giá trị Cơng thức đề cập phần sau Ngồi cịn mơ hình dự đốn khác, tùy trường hợp ta sử dụng mơ hình phù hợp với đối tượng cần dự đốn 8|Trang 1.2 Thành phần Time-series: Thông thường thành phần hợp thành time-series gồm có: trend (T), seasonality (S), cyclical (C) irregular (I) Tùy theo cách phát triển timeseries riêng biệt mà thành phần thay đổi kết hợp với Đối với mô hình phân rã có dạng kết hợp là: Additive model: Multipicative model: 𝑦(𝑡) = 𝑇(𝑡) + 𝑆(𝑡) + 𝐶(𝑡) + 𝐼(𝑡) 𝑦(𝑡) = 𝑇(𝑡) ∗ 𝑆(𝑡) ∗ 𝐶(𝑡) ∗ 𝐼(𝑡) Hình ảnh thể thành phần time-series 9|Trang 1.4 Thực dự đoán Prophet: Sau tìm hiểu cấu trúc mã nguồn với class hàm quan trọng bắt đầu thực dự đoán với Prophet Phần thực dự đốn viết ngơn ngữ Python, có nhiều công cụ để viết file py NotePad++ hay Atom Ở phần này, em thực Jupyter Notebook (được hỗ trợ cài đặt Anaconda3) Dữ liệu nguồn lấy “example_wp_log_peyton_manning.csv” folder example Prophet Dữ liệu nguồn dạng csv với column: date y Có thể download file thực test.py liệu nguồn tại: https://github.com/minhduystg1999/prophet-python 25 | T r a n g Đầu tiên import thư viện cần thiết: Sau tạo file py, ta bắt đầu import thư viện import numpy as np import pandas as pd from scipy import stats import plotly.graph_objects as go from fbprophet import Prophet numpy: liên quan đến phép tính đa chiều, mảng pandas: hỗ trợ dataframe đọc xuất file scipy: liên quan đến cơng thức tốn học, xác suất, thống kê plotly: liên quan đến việc vẽ đồ thị fbprophet: class Prophet cần để định nghĩa object Prophet, hàm liên quan sử dụng Nhập file csv in hình: df = pd.read_csv('[filepath]') print(df) Thay [filepath] đường dẫn đến file input Sau chạy file test.py 26 | T r a n g Kết quả: Thử vẽ đồ thị thể input: df.plot() Kết quả: 27 | T r a n g Tạo Prophet object fit dataframe: Đầu tiên cần chỉnh column dataframe ban đầu theo dạng Prophet [‘ds’, ‘y’] df.columns = [‘ds’, ‘y’] df['ds'] = pd.to_datetime(df['ds']) Do ta dự đoán liệu dựa liệu sẵn có đầu vào sau cần tính lỗi nên ta tạo training dataframe cắt bớt liệu từ dataframe ban đầu Ta cắt bớt 150 ngày cuối prediction_size = 150 train_df = df[:-prediction_size] Tạo object Prophet fit training dataframe p = Prophet() p.fit(train_df) 28 | T r a n g Tạo future dataframe thực dự đoán: Ta dùng hàm make_future_dataframe để thêm số lượng tháng mà ta cắt bớt để tiến hành dự đốn gán vào biến future future = p.make_future_dataframe(periods=prediction_size, freq='M') Ở periods = 150 freq = ‘D’ tương ứng cho 150 ngày Đối với time-series data dạng tháng freq = ‘M’, dạng năm freq = ‘Y’ Sau cần dự đốn hàm predict(dataframe) in kết ta vừa dự đoán forecast = p.predict(future) print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(10)) Kết predict dataframe với nhiều cột, ta nên ý cột ‘yhat’, ‘yhat_lower’ ‘yhat_upper’ Vì ta nên in hình cột Trong đó: ‘yhat’ giá trị dự đốn dựa vào mơ hình phân rã Prophet; ‘yhat_lower’ ‘yhat_upper’ biên biên ‘yhat’, tức khả dao động thấp cao ‘yhat’ 29 | T r a n g Kết ta có giá trị dự đốn ngày cuối: Vẽ đồ thị: Vẽ đồ thị hàm plot vẽ đồ thị thành phần hàm plot_components p.plot(forecast) p.plot_components(forecast) Kết quả: 30 | T r a n g Đồ thị từ hàm plot Đường xanh đậm thể giá trị yhat dự đốn cịn phần rìa sắc nhạt miền dao động yhat, cao yhat_upper, thấp yhat_lower Các chấm đen giá trị ban đầu training dataframe Giai đoạn năm cuối 2015 đầu 2016 cịn lại 150 ngày dự đốn (khơng có chấm đen nào) 31 | T r a n g Ba đồ thị thành phần từ hàm plot_components Đồ thị thể thành phần trend theo mơ hình phân rã Prophet, đoạn xanh cuối thành phần trend phần dự đoán Đồ thị thứ thành phần weekly seasonality yearly_seasonality Nếu có thêm thành phần holidays có đồ thị thành phần (dữ liệu khơng có thành phần holidays) 32 | T r a n g Tạo comparision dataframe để so sánh kết quả: Do hàm tính lỗi prophet tính lỗi liệu có trước nên với cách làm cắt bớt giá trị ta so sánh kết xem số lỗi Vì tạo hàm giúp tạo dataframe chứa giá trị dự đốn giá trị có trước để so sánh Cách làm đơn giản nối giá trị dataframe với def make_comparison_dataframe(initial, forecast): return forecast.set_index('ds')[['yhat', 'yhat_lower', 'yhat_upper']].join(initial.set_index('ds')) initial dataframe ban đầu forecast dataframe nhận sau dùng Prophet predict Kết in 10 dòng cuối cmp_df (comparison dataframe vừa tạo): Cột y giá trị thực tế ta có từ liệu ban đầu, cột lại giá trị dự đoán 33 | T r a n g Sau viết hàm tính lỗi (dựa theo hàm tính MAE MAPE Prophet): def calculate_forecast_errors(df, prediction_size): df = df.copy() df['e'] = df['y'] - df['yhat'] df['p'] = 100 * df['e'] / df['y'] predicted_part = df[-prediction_size:] error_mean = lambda error_name: np.mean(np.abs(predicted_part[error_name])) return {'MAPE': error_mean('p'), 'MAE': error_mean('e')} for err_name, err_value in calculate_forecast_errors(cmp_df, prediction_size).items(): print(err_name, err_value) Kết quả: Thực dự đoán thật: Những bước để làm quen với việc sử dụng Prophet dựa vào liệu cắt bớt để xem chênh lệch số lỗi Tiếp theo ta thực dự đoán thật cho 365 ngày kể từ ngày cuối dataframe ban đầu 19/9/2016 34 | T r a n g Do object prophet fit dataframe nên ta phải tạo lại object Prophet p2 = Prophet() p2.fit(df) future2 = p2.make_future_dataframe(periods=365, freq='D') forecast2 = p2.predict(future2) print(forecast2[['ds', 'yhat', 'yhat_lower', 'yhat_upper']]) p2.plot(forecast2) p2.plot_components(forecast2) Kết quả: Dataframe chứa kết dự đốn, ta thấy giá trị cuối ngày thuộc năm 2017 35 | T r a n g Plot tổng thể, đoạn dự đoán từ đầu năm 2016-2017 khơng có chấm đen 36 | T r a n g Plot thành phần, Prophet dự đoán 2017 trend xuống rõ rệt 37 | T r a n g Chương 4: Kết luận Time-series Data Time-series Forecasting có vai trị quan trọng việc quản lý dự đốn thơng tin nhiều lĩnh vực đời sống Tùy theo đối tượng cần theo dõi dự đốn mà có mơ hình dự đoán khác Prophet thư viện mã nguồn mở phát triển đội Core Data Science Facebook Prophet có tảng Stan phát triển ngơn ngữ Python R Prophet có mơ hình dự đốn dạng phân rã, với thành phần trend-cyclical, seasonality, holidays số lỗi Prophet công cụ dễ tiếp cận, cho phép người dùng tùy chỉnh số tham số thành phần để phù hợp với đối tượng, tượng mà họ dự đốn Ngồi hàm hỗ trợ tìm lỗi, tìm độ lệch, áp dụng thành phần holidays giúp người dùng Prophet dễ dàng việc theo dõi, nghiên cứu phát triển 38 | T r a n g Chương 5: Một số thuật ngữ báo cáo Time-series Data: trang Time-series Analysis Time-series Forecasting: trang Mơ hình phân rã – Decomposable: trang Trend: trang 10 Cyclical: trang 10 Seasonality: trang 11 Irregular: trang 12 Linear regression: https://en.wikipedia.org/wiki/Linear_regression Logistics regression: https://en.wikipedia.org/wiki/Logistic_regression MAE: https://en.wikipedia.org/wiki/Mean_absolute_error MAPE: https://en.wikipedia.org/wiki/Mean_absolute_percentage_error Nội suy – Interpolation: https://en.wikipedia.org/wiki/Interpolation Ngoại suy – Extrapolation: https://en.wikipedia.org/wiki/Extrapolation Chương 6: Tài liệu tham khảo [1] Forecasting at scale – Sean J Taylor, Benjamin Letham: https://peerj.com/preprints/3190/ [2] Hỗ trợ Prophet ngôn ngữ R (Python khơng có trang tra cứu tương ứng): https://rdrr.io/cran/prophet/src/R/prophet.R [3] Trang chủ Facebook Prophet: https://facebook.github.io/ [4] Forecasting: Principle and Practice – Rob J Hyndman, George Athanasopoulos: https://otexts.com/fpp2/ [5] https://stackoverflow.com/ [6] https://www.xenonstack.com/blog/time-series-deep-learning/ [7] Time Series for Beginners – Jack Esprabens, Ari Arango, Joshua Kim: https://bookdown.org/JakeEsprabens/431-Time-Series/ [8] https://en.wikipedia.org ===============HẾT=============== 39 | T r a n g ... thiết bị công nghệ sử dụng thường xuyên phát triển Chẳng hạn dự đoán biến động chứng khoán, dự đoán thời tiết, dự đoán lượng truy cập trang web… Đó lý đời công cụ dự báo Prophet, cơng cụ tìm hiểu. .. 3: Công cụ dự báo Prophet 15 1.1 Tổng quan Facebook Prophet: 15 1.2 Yêu cầu cài đặt: 17 1.3 Tìm hiểu mã nguồn Prophet: 19 1.4 Thực dự đoán Prophet: ... công 18 | T r a n g 1.3 Tìm hiểu mã nguồn Prophet: Để tìm hiểu cấu trúc mã nguồn Prophet, clone download từ GitHub Prophet (https://github.com/facebook /prophet) Bên folder prophet- master gồm files