phát triển mô hình dự báo dữ liệu chuỗi thời gian ngắn hạn

153 20 0
phát triển mô hình dự báo dữ liệu chuỗi thời gian ngắn hạn

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ THÀ NH PHỐ HỒ CHÍ MINH PHẠM NGỌC CẢNH PHÁT TRIỂN MƠ HÌNH DỰ BÁO DỮ LIỆU CHUỖI THỜI GIAN NGẮN HẠN LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍ NH TP Hồ Chí Minh, Năm 2019 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ THÀ NH PHỐ HỒ CHÍ MINH PHẠM NGỌC CẢNH PHÁT TRIỂN MƠ HÌNH DỰ BÁO DỮ LIỆU CHUỖI THỜI GIAN NGẮN HẠN Chuyên ngành Mã số chuyên ngành : Khoa ho ̣c máy tính : 60 48 01 01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍ NH Người hướng dẫn khoa ho ̣c: TS Pha ̣m Văn Chung TP Hồ Chí Minh, Năm 2019 i LỜI CAM ĐOAN Tôi cam đoan luận văn “PHÁT TRIỂN MÔ HÌNH DỰ BÁO DỮ LIỆU CH̃I THỜI GIAN NGẮN HẠN” cơng trình nghiên cứu tơi Ngoại trừ tài liệu tham khảo trích dẫn luận văn này, tơi cam đoan toàn phần hay phần nhỏ luận văn chưa công bố sử dụng để nhận cấp nơi khác Khơng có sản phẩm/nghiên cứu người khác sử dụng luận văn mà khơng trích dẫn theo quy định Luận văn chưa nộp để nhận cấp trường đại học sở đào tạo khác Tp Hồ Chí Minh, tháng năm 2019 Người thực đề tài Pha ̣m Ngo ̣c Cảnh ii LỜI CẢM ƠN Tôi xin gửi lời cảm ơn trân trọng sâu sắc tới tiế n si ̃ Pha ̣m Văn Chung – thầ y tận tình bảo, hướng dẫn, truyền đạt kiến thức và kinh nghiê ̣m quý báu cho tơi suốt q trình nghiên cứu thực luâ ̣n văn Trong trình học tập, triển khai nghiên cứu luâ ̣n văn đạt hơm nay, tơi ln nhớ đến cơng lao giảng dạy hướng dẫn q thầy, cô trường Đại học Mở TP HCM, đặc biệt q thầy, khoa Sau đa ̣i ho ̣c và khoa Công nghê ̣ thông tin Mă ̣c dù đã cố gắ ng rấ t nhiề u quá trin ̀ h thực hiê ̣n luâ ̣n văn, song với giới hạn thời gian và sự ̣n chế của khả bản thân nên không thể không có những thiế u sót Kính mong nhận chia sẻ ý kiến đóng góp quý báu q thầy giáo bạn ho ̣c viên Tp Hồ Chí Minh, tháng năm 2019 Người thực đề tài Pha ̣m Ngo ̣c Cảnh iii TÓM TẮT Hiện nay, toán dự báo liệu chuỗi thời gian nhận nhiều quan tâm nhà khoa học Nhiều phương pháp đề xuất, nhiên đa số áp dụng cho loại liệu cụ thể có ưu nhược điểm riêng Trong đó, phổ biến hai phương pháp dự báo: dựa kỹ thuật làm trơn hàm mũ đặc điểm không yêu cầu liệu đầu vào lớn mạng nơ ron nhân tạo nắm bắt tiń h phi tuyến liệu đầu vào Tuy nhiên, nhiều nghiên cứu liệu có tính xu hướng tính mùa chất lượng dự báo phương pháp mạng nơ ron nhân tạo khơng cao Tương tự, liệu có tính phi tuyến chất lượng dự báo phương pháp làm trơn hàm mũ không tốt Trong luận văn này, với ý tưởng tận dụng khả xấp xỉ hàm phi tuyến mạng nơ ron nhân tạo (ANN) khả xấp xỉ tốt thành phần mùa xu hướng phương pháp làm trơn hàm mũ bậc (ES3), đề xuất mô hin ̀ h dự báo dữ liê ̣u chuỗi thời gian ngắ n ̣n bằ ng cách xây dựng thực mô hình lai ghép mạng nơ ron nhân tạo với kỹ thuật làm trơn hàm mũ bậc (ANN-ES3) Mô hình đề xuất có khả dự báo đa dạng loại liệu cho kết dự báo tốt Đồng thời, thực ba phương pháp dự báo: ANN, ES3 lai ghép ANN với kỹ thuật làm trơn hàm mũ bậc (ANN-ES1) để so sánh với phương pháp đề xuất Tiến hành thực nghiệm dự báo với liệu ngắn hạn thực tế, mơ hình lai ghép ANN-ES3 chúng tơi đề xuất cho chất lượng dự báo tốt so với ba mơ hình cịn lại (ANN, ES3, and hybrid ANN-ES1) iv ABSTRACT Currently, time series data forecasting gets much attention from the scientists Many forecasting methods have been proposed, however, most of them are applied to specific data and each method has its own advantages and disadvantages Among them, the popular are two forecasting methods: based on exponential smoothing technique because it does not require large input data and based on artificial neuron network because it is able to capture non-linearity of input data However, many studies show that for trend and seasonal data, the quality of the artificial neuron network is not high Similarly, for non-linear data, the quality of the exponential smoothing technique is not good In this thesis, with the idea of utilizing the nonlinear approximation capability of the artificial neural network (ANN) and the ability to approximate the seasonal and trend component of the triple exponential smoothing method (ES3), we proposed a new model to forecast short-term time series data by developing and implementing hybrid model between artificial neural network and triple exponential smoothing method (ANN-ES3) This hybrid model is able to forecast various types of data and gives better forecasting results We also implement three forecasting methods: ANN, ES3 and hybrid model between ANN and single exponential smoothing (ANN-ES1) to compare with the proposed method Through the forecast experiment with actual short-term time series data, the proposed hybrid method (ANN-ES3) give better forecasting results than the other three models (ANN, ES3, and hybrid ANN-ES1) v MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN .ii TÓM TẮT iii MỤC LỤC v DANH MỤC HÌ NH viii DANH MỤC BẢNG x DANH MỤC TỪ VIẾT TẮT xi CHƯƠNG 1: GIỚI THIỆU 1.1 CƠ SỞ HÌ NH THÀNH LUẬN VĂN 1.1.1 Đinh ̣ nghiã chuỗi dữ liê ̣u thời gian 1.1.2 1.1.3 Các thành phầ n của dữ liê ̣u chuỗi thời gian Phân tích dữ liê ̣u chuỗi thời gian ứng dụng .3 1.1.4 Tầ m quan tro ̣ng và ứng du ̣ng của dự báo dữ liê ̣u chuỗi thời gian 1.2 Các phương pháp dự báo dữ liê ̣u chuỗi thời gian TÍNH CẤP THIẾT CỦA ĐỀ TÀI 1.3 MỤC TIÊU NGHIÊN CỨU 1.1.5 1.3.1 Mu ̣c tiêu nghiên cứu tổ ng quát .8 1.3.2 Mu ̣c tiêu nghiên cứu cu ̣ thể .8 1.4 1.5 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN CỦA ĐỀ TÀI CẤU TRÚ C LUẬN VĂN 10 CHƯƠNG 2: TỔNG THUẬT CÁC CÔNG TRÌNH LIÊN QUAN 11 1.6 2.1 CÔNG TRÌNH CỦA BOX VÀ JENKINS 11 2.1.1 Mô hiǹ h ARIMA 11 2.1.2 Mơ hình Seasonal ARIMA 11 2.1.3 Ưu điể m của mô hiǹ h Box-Jenkins 12 2.1.4 Nhược điể m của mô hình Box-Jenkins .12 2.2 CÔNG TRÌNH CỦA HOLT-WINTERS 13 vi 2.2.2 Giới thiê ̣u mô hình 13 Ưu điể m 13 2.2.3 Nhươ ̣c điể m 14 2.2.1 2.3 MẠNG NƠ RON NHÂN TẠO 14 2.3.1 Ưu điể m 14 Nhươ ̣c điể m 15 CÁC CÔNG TRÌ NH GẦN ĐÂY 16 2.3.2 2.4 Tiǹ h hiǹ h nghiên cứu dự báo chuỗi dữ liê ̣u thời gian hiê ̣n 16 2.4.3 Mô ̣t số mô hình lai ghép 17 CHƯƠNG 3: CƠ SỞ LÝ THUYẾT 19 2.4.1 3.1 PHƯƠNG PHÁP LÀM TRƠN KIỂU HÀM MŨ 19 3.1.1 Mô hiǹ h làm trơn hàm mũ bậc (ES1) 19 3.1.2 Mô hình làm trơn hàm mũ bâ ̣c hai (ES2) 21 3.1.3 Mô hiǹ h làm trơn hàm mũ bâ ̣c ba (ES3) 23 3.1.4 Mô hiǹ h cô ̣ng và mô hình nhân 24 3.2 MÔ HÌNH MẠNG NƠ RON NHÂN TẠO 26 3.2.1 Cấ u trúc tổ ng quát của mô ̣t ANN 26 3.2.2 Qui trình xử lý thông tin ANN 27 3.2.3 Quá triǹ h ho ̣c của ANN 29 Nguyên tắ c hoa ̣t đô ̣ng và các giải thuâ ̣t huấ n luyê ̣n ma ̣ng nơ ron 30 3.2.4 3.3 HƯỚNG TIẾP CẬN MƠ HÌNH LAI GHÉP 41 3.3.1 Lý cho ̣n kỹ thuâ ̣t làm trơn hàm mũ để bổ sung cho ANN dự báo dữ liê ̣u chuỗi thời gian ngắ n ̣n 41 3.3.2 Sử du ̣ng phầ n mề m R để ước lươ ̣ng các tham số cho mô hiǹ h ES3 41 3.3.3 Thực hiê ̣n mơ hình lai ghép ANN-ES3 42 CHƯƠNG 4: HIỆN THỰC VÀ THỬ NGHIỆM 45 4.1 HIỆN THỰC 45 4.1.1 Mô đun ANN 45 4.1.2 Mô đun làm trơn hàm mũ 47 4.1.3 Mô đun lai ghép 49 4.2 DỮ LIỆU THỬ NGHIỆM 50 vii 4.3 KẾT QUẢ THỬ NGHIỆM VÀ ĐÁNH GIÁ 52 4.3.1 Bộ liệu 1: Sản xuất sắt hàng tháng Úc 54 4.3.2 Bộ liệu 2: Số liệu tài M2 hàng tháng Mỹ 56 4.3.3 Bộ liệu 3: Lượng tiêu thụ Chocolate hàng tháng Úc 58 4.3.4 Bộ liệu 4: Nhiệt độ cao hàng tháng Paris, Pháp 60 4.3.5 Bộ liệu 5: Số liệu đóng cửa số công nghiệp Dow-Jones .62 4.3.6 Bộ liệu 6: Số nữ thất nghiệp hàng tháng Mỹ 64 4.3.7 Bộ liệu 7: Doanh số xi măng hàng quý Úc 66 4.3.8 Bộ liệu 8: Mực nước hàng tháng hồ Erie 68 4.3.9 Bộ liệu 9: Sản lượng điện hàng quý Úc 70 4.3.10 Bộ liệu 10: Số lượng người di cư hàng tháng Úc .72 TỔNG HỢP, ĐÁNH GIÁ VÀ NHẬN XÉT CHUNG 73 CHƯƠNG 5: KẾT LUẬN 77 4.4 5.1 Những công việc thực 77 5.2 Kết đạt 78 5.3 Mă ̣t ̣n chế 78 Hướng phát triể n của luâ ̣n văn 78 TÀI LIỆU THAM KHẢO 80 5.4 PHỤ LỤC 82 PHỤ LỤC A 82 PHỤ LỤC B 84 PHỤ LỤC C 95 PHỤ LỤC D .105 viii DANH MỤC HÌNH Hình 1.1: Hình ảnh chuỗi thời gian Hình 1.2: Mơ tả thành phần xu hướng tiến lên Hình 1.3: Mô tả thành phần mùa Hình 1.4: Mơ tả thành phần chu kỳ Hình 1.5: Ví dụ dự báo liệu chuỗi thời gian Hình 1.6: Mợt chuỗi liệu thời gian tuyến tính Hình 1.7: Mợt chuỗi liệu thời gian phi tuyến tính Hình 3.1: Một chuỗi dữ liê ̣u thời gian không có thời vụ xu hướng rõ ràng 20 Hình 3.2: Một dự báo phương pháp ES1 21 Hình 3.3: Một ví dụ liệu có tính mùa 22 Hình 3.4: Một dự báo phương pháp ES2 22 Hình 3.5: Một dự báo bằ ng mô hình cộng và mô hình nhân 25 Hình 3.6: Minh họa một ANN 26 Hình 3.7: Mô tả kiến trúc ANN 26 Hình 3.8: Mô tả qui trình xử lý thơng tin ANN 27 Hình 3.9: Mô tả về hàm truyề n 28 Hình 3.10: Mô tả các kiể u kiế n trúc ANN 29 Hình 3.11: Mô tả một perceptron 30 Hình 3.12: Mô tả về giải thuật lan truyền ngược 35 Hình 3.13: Mã giả cho giải thuật RPROP 39 Hình 3.14: Mô hình dự báo lai ghép 42 Hình 4.1: Các mô đun mô hình lai ghép 45 Hình 4.2: Giao diện mô đun ANN 46 Hình 4.3: Giao diện mô đun làm trơn hàm mũ 48 Hình 4.4: Giao diện mô đun lai ghép 49 Hình 4.5: Bộ liệu – Sản xuất sắt hàng tháng Úc 54 Hình 4.6: Sai số dự báo mơ hình cho liệu 54 125 XmlNode tempNode = root.SelectSingleNode("descendant::Input" + Convert.ToString(i + 1)); //get activation function type string activationFunc = tempNode.SelectSingleNode("descendant::activateFunc").InnerText; if (activationFunc.Equals("SIGMOID_FUNCTION")) { loadedNetwork.m_arInputNodes[i].m_activeFuncType = ActionvationFunction.SIGMOID_FUNCTION; } //get weight for (int j = 0; j < loadedNetwork.m_iNumHiddenNodes; j++) { loadedNetwork.m_arInputHiddenConn[i,j] = Convert.ToDouble(tempNode.SelectSingleNode("descendant::InHid" + Convert.ToString(i + 1) + Convert.ToString(j + 1)).InnerText); } } //Get Hidden Nodes for (int i = 0; i < loadedNetwork.m_iNumHiddenNodes; i++) { //get a hidden node XmlNode tempNode = root.SelectSingleNode("descendant::Hidden" + Convert.ToString(i + 1)); //get activation function type string activationFunc = tempNode.SelectSingleNode("descendant::activateFunc").InnerText; if (activationFunc.Equals("SIGMOID_FUNCTION")) { loadedNetwork.m_arHiddenNodes[i].m_activeFuncType = ActionvationFunction.SIGMOID_FUNCTION; } //get bias loadedNetwork.m_arHiddenBias[i] = Convert.ToDouble(tempNode.SelectSingleNode("descendant::bias").InnerText); //get weight for (int j = 0; j < loadedNetwork.m_iNumOutputNodes; j++) { loadedNetwork.m_arHiddenOutputConn[i, j] = Convert.ToDouble(tempNode.SelectSingleNode("descendant::HidOut" + Convert.ToString(i + 1) + Convert.ToString(j + 1)).InnerText); } } //Get Output Nodes for (int i = 0; i < loadedNetwork.m_iNumOutputNodes; i++) { //get a output node XmlNode tempNode = root.SelectSingleNode("descendant::Output" + Convert.ToString(i + 1)); //get activation function type string activationFunc = tempNode.SelectSingleNode("descendant::activateFunc").InnerText; if (activationFunc.Equals("SIGMOID_FUNCTION")) { loadedNetwork.m_arOutputNodes[i].m_activeFuncType = ActionvationFunction.SIGMOID_FUNCTION; } //get bias PHỤ LỤC D: MỘT SỐ MÃ NGUỒN CỦA CHƯƠNG TRÌNH 126 loadedNetwork.m_arOutputBias[i] = Convert.ToDouble(tempNode.SelectSingleNode("descendant::bias").InnerText); } } catch (Exception e) { Console.WriteLine(e.Message); return null; } return loadedNetwork; } static public bool Export(NeuronNetwork network, string pathFile) { XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("Network"); doc.AppendChild(root); //save number of Input, Hidden, Output Nodes XmlElement numInput = doc.CreateElement("numInputNodes"); numInput.InnerText = Convert.ToString(network.m_iNumInputNodes); XmlElement numHidden = doc.CreateElement("numHiddenNodes"); numHidden.InnerText = Convert.ToString(network.m_iNumHiddenNodes); XmlElement numOutput = doc.CreateElement("numOutputNodes"); numOutput.InnerText = Convert.ToString(network.m_iNumOutputNodes); XmlElement numLag = doc.CreateElement("Lag"); numLag.InnerText = network.GetStringLags(); root.AppendChild(numInput); root.AppendChild(numHidden); root.AppendChild(numOutput); root.AppendChild(numLag); //save input nodes XmlElement InputNodes = doc.CreateElement("InputNodes"); for (int i = 0; i < network.m_iNumInputNodes; i++) { XmlElement aInputNode = doc.CreateElement("Input" + Convert.ToString(i + 1)); //save activation func if (network.m_arInputNodes[i].m_activeFuncType == ActionvationFunction.SIGMOID_FUNCTION) { XmlElement actFunc = doc.CreateElement("activateFunc"); actFunc.InnerText = "SIGMOID_FUNCTION"; aInputNode.AppendChild(actFunc); } //save weight for in-hid connection for (int j = 0; j < network.m_iNumHiddenNodes; j++) { XmlElement aWeight = doc.CreateElement("InHid" + Convert.ToString(i + 1) + Convert.ToString(j + 1)); aWeight.InnerText = Convert.ToString(network.m_arInputHiddenConn[i, j]); aInputNode.AppendChild(aWeight); } InputNodes.AppendChild(aInputNode); } root.AppendChild(InputNodes); //save hidden nodes XmlElement HiddenNodes = doc.CreateElement("HiddenNodes"); for (int i = 0; i < network.m_iNumHiddenNodes; i++) PHỤ LỤC D: MỘT SỐ MÃ NGUỒN CỦA CHƯƠNG TRÌNH 127 { XmlElement aHiddenNode = doc.CreateElement("Hidden" + Convert.ToString(i + 1)); //save activation func if (network.m_arHiddenNodes[i].m_activeFuncType == ActionvationFunction.SIGMOID_FUNCTION) { XmlElement actFunc = doc.CreateElement("activateFunc"); actFunc.InnerText = "SIGMOID_FUNCTION"; aHiddenNode.AppendChild(actFunc); } //save bias XmlElement bias = doc.CreateElement("bias"); bias.InnerText = Convert.ToString(network.m_arHiddenBias[i]); aHiddenNode.AppendChild(bias); //save weight for hid-out connection for (int j = 0; j < network.m_iNumOutputNodes; j++) { XmlElement aWeight = doc.CreateElement("HidOut" + Convert.ToString(i + 1) + Convert.ToString(j + 1)); aWeight.InnerText = Convert.ToString(network.m_arHiddenOutputConn[i, j]); aHiddenNode.AppendChild(aWeight); } HiddenNodes.AppendChild(aHiddenNode); } root.AppendChild(HiddenNodes); //save output nodes XmlElement OutputNodes = doc.CreateElement("OutputNodes"); for (int i = 0; i < network.m_iNumOutputNodes; i++) { XmlElement aOutputNode = doc.CreateElement("Output" + Convert.ToString(i + 1)); //save activation func if (network.m_arOutputNodes[i].m_activeFuncType == ActionvationFunction.SIGMOID_FUNCTION) { XmlElement actFunc = doc.CreateElement("activateFunc"); actFunc.InnerText = "SIGMOID_FUNCTION"; aOutputNode.AppendChild(actFunc); } //save bias XmlElement bias = doc.CreateElement("bias"); bias.InnerText = Convert.ToString(network.m_arOutputBias[i]); aOutputNode.AppendChild(bias); OutputNodes.AppendChild(aOutputNode); } root.AppendChild(OutputNodes); doc.Save(pathFile); return true; } } } Lớp HoltWinters.cs using System; using System.Collections.Generic; PHỤ LỤC D: MỘT SỐ MÃ NGUỒN CỦA CHƯƠNG TRÌNH 128 using using using using using using using System.Linq; System.Text; STATCONNECTORCLNTLib; StatConnectorCommonLib; STATCONNECTORSRVLib; System.IO; System.Threading; namespace HybridModel { class HoltWinters { public double alpha = Double.NaN; public double beta = Double.NaN; public double gamma = Double.NaN; public double[] fitted = null; public double SSE = Double.NaN; public static string pathRScriptExe = "C:\\Program Files\\R\\R2.15.1\\bin\\Rscript.exe"; public static string inputRscript = "D:\\input.R"; public static HoltWinters getValue(string pathDLL, string pathData, int colum, int from, int end, int freq, bool additiveModel, bool simpleModel) { StatConnector engine = new StatConnector(); try { string newPathData = pathData.Replace("\\", "/"); string readData = "data

Ngày đăng: 17/11/2020, 23:22