Hướng dẫn multivariate time series forecasting python - python dự báo chuỗi thời gian đa biến

Show

Transformer Unleashed: Dự báo sâu của chuỗi thời gian đa biến trong Python

Ví dụ từ đầu đến cuối: Dự báo xác suất của chuỗi thời gian đa biến với tính thời vụ phức tạp

Hầu hết các phương pháp dự báo cổ điển được giới hạn trong chuỗi thời gian đơn biến. Chỉ có một vài trong số họ chấp nhận loạt đa biến, ví dụ Sarimax. Khi nhiều mô hình thời vụ cũng xuất hiện, các mạng thần kinh được định vị tốt để vượt qua các phương pháp cổ điển.

Siêu anh hùng tốc độ - Hình ảnh miễn phí trên Pixabay của Alan9187

Trong bài viết hôm nay, chúng tôi sẽ không xuất hiện một sự xuất hiện tương đối gần đây giữa các nhà dự báo mạng thần kinh: mô hình máy biến áp. Chúng tôi sẽ thả nó ra trên một chuỗi thời gian đa biến được đặc trưng bởi ba thành phần theo mùa: giờ, các ngày trong tuần và tháng. Điều này cung cấp một chuỗi thời gian phức tạp thích hợp cho một mạng lưới thần kinh để chê bai.

Chúng tôi sẽ dự đoán giá điện ở Tây Ban Nha.

Tạo nhu cầu năng lượng hàng giờ và thời tiết | Kaggle (Screesnhot của tác giả)

Một ảnh chụp màn hình của ma trận tương quan cho thấy nhiều yếu tố ảnh hưởng đến giá điện. Máy biến áp sẽ học cách tích hợp các yếu tố liên quan giữa chúng là đồng biến (hồi quy).

Đường cong sốt màu cam của giá điện quan sát được, bên dưới, cho chúng ta biết rằng một số mô hình theo mùa có liên quan, nhưng rõ ràng là nhiều hơn một loại duy nhất vì chúng ta thấy các dao động của biên độ khác nhau.

Đường cong màu xanh là một loại spoiler. Nó tiết lộ rằng máy biến áp mà chúng ta sẽ xây dựng sẽ có thể theo dõi và dự đoán các đỉnh Zig-Zagging và DIP với độ chính xác hợp lý. Lỗi tỷ lệ phần trăm tuyệt đối trung bình của nó trong tập kiểm tra nhỏ hơn 5%.

Hãy để tìm hiểu làm thế nào nó đến dự báo.

Hình ảnh của tác giả

1. Khái niệm

1.1 Mạng thần kinh biến áp

Một bài báo năm 2017, chú ý là tất cả những gì bạn cần (arxiv.org), đã phác thảo khái niệm về các mạng dựa trên sự chú ý, ban đầu trong bối cảnh xử lý ngôn ngữ tự nhiên. NLP xử lý các chuỗi từ, được đặt hàng bởi ngữ pháp và cú pháp. Mạng dựa trên sự chú ý, còn gọi là Transformer, lấy một chuỗi văn bản đầu vào, ví dụ bằng tiếng Anh và tạo chuỗi văn bản đầu ra, ví dụ bằng tiếng Tây Ban Nha. Phân tích chuỗi thời gian hoạt động với các chuỗi theo thứ tự thời gian: các bước thời gian. Máy biến áp phải tạo ra một chuỗi dự báo dọc theo trục thời gian từ một chuỗi các quan sát đào tạo.

Cái gọi là đầu chú ý cho phép máy biến áp tìm hiểu mối quan hệ giữa bước thời gian và mọi bước thời gian khác trong chuỗi đầu vào. Trong đào tạo NLP, nó có thể học cách chú ý đến những từ mà thường đi kèm với các từ khác, thông qua việc quay lại. Cơ chế phân tích ngữ cảnh này cho phép nó học cách liên kết các từ với các từ và trình tự khác. Máy biến áp cập nhật trọng số chú ý của nó và hạ cấp các lựa chọn thay thế từ ít liên quan nhất. Bằng cách này, nó học các mẫu cú pháp. Một ma trận điểm thể hiện cách các từ khác được liên kết chặt chẽ với từ được đề cập.

Đây là khả năng chúng ta sẽ chuyển từ các chuỗi từ sang chuỗi các bước thời gian.

Bạn có thể tìm thấy một lời giải thích chuyên sâu hơn về kiến ​​trúc máy biến áp trong một loạt ba bài báo TDS được viết bởi Ketan Doshi: Transformers được giải thích trực quan | bởi Ketan Doshi | Hướng tới khoa học dữ liệu.

1.2 Dự báo xác suất: Hồi quy lượng tử

Một phương pháp dự báo xác định tạo ra ước tính điểm: một giá trị duy nhất - thường là giá trị trung bình - ở mỗi bước. Dự báo xác định không tiết lộ giới hạn trên và dưới giữa đó các giá trị tương lai không chắc chắn của người Hồi giáo có thể xuất hiện.

Một phương pháp dự báo xác suất tính toán nhiều hơn một mẫu ở mỗi bước thời gian. Mạng lưới thần kinh đánh giá chức năng mất lượng tử, một biến thể của các chức năng mất thông thường. Chúng tôi sẽ khuyên máy biến áp của chúng tôi sử dụng hồi quy lượng tử để tính toán phần trăm dự báo. Mỗi phần trăm đại diện cho một chuỗi thời gian đơn biến. Các cặp lượng tử - ví dụ, 1%/99% hoặc 10%/90% - khung đường cong của các giá trị dự báo trung tâm. Biểu đồ xác suất cho thấy các dải không chắc chắn kết quả.

Hình ảnh của tác giả

1. Khái niệm

1.1 Mạng thần kinh biến áp

Một bài báo năm 2017, chú ý là tất cả những gì bạn cần (arxiv.org), đã phác thảo khái niệm về các mạng dựa trên sự chú ý, ban đầu trong bối cảnh xử lý ngôn ngữ tự nhiên. NLP xử lý các chuỗi từ, được đặt hàng bởi ngữ pháp và cú pháp. Mạng dựa trên sự chú ý, còn gọi là Transformer, lấy một chuỗi văn bản đầu vào, ví dụ bằng tiếng Anh và tạo chuỗi văn bản đầu ra, ví dụ bằng tiếng Tây Ban Nha. Phân tích chuỗi thời gian hoạt động với các chuỗi theo thứ tự thời gian: các bước thời gian. Máy biến áp phải tạo ra một chuỗi dự báo dọc theo trục thời gian từ một chuỗi các quan sát đào tạo.

Cái gọi là đầu chú ý cho phép máy biến áp tìm hiểu mối quan hệ giữa bước thời gian và mọi bước thời gian khác trong chuỗi đầu vào. Trong đào tạo NLP, nó có thể học cách chú ý đến những từ mà thường đi kèm với các từ khác, thông qua việc quay lại. Cơ chế phân tích ngữ cảnh này cho phép nó học cách liên kết các từ với các từ và trình tự khác. Máy biến áp cập nhật trọng số chú ý của nó và hạ cấp các lựa chọn thay thế từ ít liên quan nhất. Bằng cách này, nó học các mẫu cú pháp. Một ma trận điểm thể hiện cách các từ khác được liên kết chặt chẽ với từ được đề cập.

Đây là khả năng chúng ta sẽ chuyển từ các chuỗi từ sang chuỗi các bước thời gian.

Như mọi khi, hãy tạo một môi trường ảo mới trước khi bạn cài đặt gói kết thúc các thư viện lớn như Pytorch, như phi tiêu.

Ba thành phần phi tiêu tùy chọn có thể được cài đặt riêng. Bên cạnh thư viện lõi phi tiêu, bạn sẽ cần thành phần phi tiêu [ngọn đuốc] để làm việc với các mạng thần kinh. Bạn có thể bỏ qua hai tùy chọn khác: các gói của phi tiêu cho các gói PMDarima và Tiên tri.

3. Cài đặt và hằng số điều khiển

Chúng tôi đặt một số siêu phân tích để định cấu hình mô hình biến áp và một số hằng số khác đại diện cho các cài đặt điều khiển bổ sung.

Ngay ở trên cùng, lưu ý tải tham số.

  • Khi nó được đặt thành sai, kịch bản sẽ đào tạo một mô hình máy biến áp trên bộ đào tạo.
  • Khi tải được đặt thành true, tập lệnh sẽ không kiềm chế mô hình. Thay vào đó, nó sẽ tải một mô hình biến áp đã lưu trước đó từ thư mục làm việc hiện tại - thư mục mà bạn đã lưu sổ ghi chép Jupyter. Phiên đào tạo dài sẽ được bỏ qua và kịch bản sẽ tiến hành tạo dự báo từ mô hình đã tải.
  • Ngay sau khi một buổi đào tạo hoàn tất, tập lệnh sẽ tự động lưu mô hình mới được đào tạo trong một tệp TAR. Bạn có thể sửa đổi tên tệp của nó trong dòng 2.

Máy đo cường độ của máy biến áp:

  • Các kỷ nguyên biểu thị số lượng chu kỳ đào tạo: một lần vượt qua, tiếp theo là một lần vượt qua của toàn bộ tập huấn luyện. Tôi đã thử nghiệm với 50 và 100 kỷ nguyên và cuối cùng đã giải quyết trên 200 epoch để đạt được một con mape thỏa đáng. Có thể, chúng tôi có thể đạt được một con ma thậm chí thấp hơn 4,5% bằng cách mở rộng khóa đào tạo lên 400 kỷ nguyên trở lên.EPOCHS denote the number of training cycles: one forward pass, followed by one backward pass of the entire training set. I experimented with 50 and 100 epochs and finally settled on 200 epochs to reach a satisfactory MAPE. Possibly, we could achieve a MAPE that is even lower than 4.5% by extending the training to 400 or more epochs.
  • Inlen đặt input_chunk_length: số nút của lớp đầu vào. Chuỗi thời gian của chúng tôi có tần số hàng giờ, do đó kích thước lớp đầu vào sẽ bao gồm ít nhất 24 giờ. Nói chung, các khối đầu vào cần phải đủ lớn để bao gồm một chu kỳ đầy đủ theo mùa, nếu không thì máy biến áp sẽ đấu tranh để ghép lại mô hình theo mùa. Để tối ưu hóa việc sử dụng bộ nhớ, kích thước lớp đầu vào phải được biểu thị dưới dạng công suất 2. Các thí nghiệm của tôi với các khối đầu vào lớn hơn 32 (ví dụ 256, đủ dài để bao gồm 168 giờ trong một tuần) , nhưng đến với thời gian đào tạo dài hơn nhiều. 32 là trần nhị phân tiếp theo trên 24 giờ của một ngày.sets the input_chunk_length: the node count of the input layer. Our time series has an hourly frequency, therefore the input layer size should comprise at least 24 hours. In general, the input chunks need to be large enough to comprise a full seasonal cycle, or else the Transformer will struggle to piece together the seasonal pattern. To optimize memory usage, the input layer size should expressed as a power of 2. My experiments with larger input chunks than 32 (for instance 256, long enough to comprise the 168 hours in a week) did not yield better results in terms of MAPE, but came with much longer training times. 32 is the next binary ceiling above the 24 hours of a day.
  • Tham số Valwait bảo máy biến áp cập nhật chức năng mất sau khi nhiều kỷ nguyên - không nhất thiết phải sau mỗi vòng lặp.VALWAIT parameter tells the Transformer to update the loss function after as many epochs — not necessarily after every single loop.
  • Feat đặt số lượng các tính năng dự kiến ​​trong các đầu vào, mặc định = 512. Tôi đã có một MAPE chấp nhận được chỉ với 32. 512 trông giống như một quá mức cần thiết cho mục đích phân tích chuỗi thời gian và có thể khiến chúng tôi gặp rủi ro quá mức. sets the number of the expected features in the inputs, default = 512. I’ve got an acceptable MAPE with just 32. 512 looked like an overkill for the purpose of time series analysis and could expose us to overfitting risks.
  • DIM_FF chia tỷ lệ mạng FeedForward, mặc định = 2.048. Tôi giới hạn nó ở 128 chiều.scales the feedforward network, default = 2,048. I limited it to 128 dimensions.
  • Những người đứng đầu xác định số lượng người đứng đầu chú ý, mặc định = 8. Hôm nay ví dụ hoạt động với 4, mà tôi đã xem xét đủ để đối phó với ba thứ tự thời vụ và xu hướng tiềm năng hoặc thành phần chu kỳ.defines the number of attention heads, default = 8. Today’s example works with 4, which I considered sufficient to deal with three orders of seasonality and a potential trend or cyclical component.
  • Số lượng các lớp mã hóa và bộ giải mã, mặc định = 6. Đối với hầu hết các chuỗi thời gian, tôi đã không mong đợi rằng sẽ cần hơn 4 lớp để xác định xu hướng và các mẫu theo mùa. Quá nhiều lớp có thể làm cho mô hình dễ bị tổn thương khi quá mức.encoder and decoder layers, default = 6. For most time series, I’d not expect that more than 4 layers will be needed to identify trend and seasonal patterns. Too many layers could make the model vulnerable to overfitting.
  • Tỷ lệ bỏ học là 0,1 cho máy biến áp tắt ngẫu nhiên 10% các nút trong một kỷ nguyên. Điều này ngăn không cho mạng tự đào sâu vào một cấu hình đơn, đóng băng của các nút.DROPOUT rate of 0.1 tells the Transformer to randomly switch off 10% of the nodes in an epoch. This prevents the network from digging itself too deeply into a single, frozen configuration of nodes.
  • Một hàm kích hoạt phi tuyến ACTF dịch các thông lượng giữa hai lớp. Chúng ta có thể chọn giữa hàm đơn vị tuyến tính được chỉnh lưu, Rel Relu (mặc định) và hàm đơn vị tuyến tính lỗi Gaussian, Gel Gelu. Để biết những hiểu biết sâu sắc hơn, xem: Các chức năng kích hoạt hiện đại | Hướng tới khoa học dữ liệu.activation function ACTF translates the throughputs between two layers. We can choose between the rectified linear unit function, “relu” (default), and the Gaussian error linear unit function, “gelu”. For deeper insights, see: Modern activation functions | Towards Data Science.
  • Kích thước lô biểu thị số lượng mẫu mà máy biến áp sẽ xử lý trước khi cập nhật ma trận trọng lượng của nó. Các lô lớn có thể dẫn đến quá mức và có thể va chạm vào giới hạn bộ nhớ của hệ thống. Các lô nhỏ có thể dẫn đến các bộ giảm gradient chuyển hướng một cách thất thường. Lý tưởng nhất, kích thước lô phải được thể hiện bằng sức mạnh 2 để sử dụng bộ nhớ tối ưu. Kích thước ban đầu là 32 là hướng dẫn thường xuyên nhất mà người ta tìm thấy trong các nguồn khoa học dữ liệu. Tôi đã nâng kích thước lô lên một bậc trên 24 giờ: 32 giờ là trần nhị phân tiếp theo.BATCH size denotes the number of samples the Transformer will process before updating its weight matrices. Large batches can lead to overfitting and may bump against the memory limits of the system. Small batches can result in gradient descents that erratically switch directions. Ideally, the batch size should be expressed in powers of 2 for optimal memory usage. An initial size of 32 is the most frequent guidance one finds in data science sources. I raised the batch size by one notch above 24 hours: 32 hours is the next binary ceiling.
  • N_FC, chân trời dự báo, được đặt thành khoảng thời gian 1 giờ, dự báo trước 1 bước. the forecast horizon, is set to a time period of 1 hour, a 1-step ahead forecast.
  • Rand đặt hạt giống ngẫu nhiên thành một giá trị có thể được sao chép giữa các lần chạy.random seed to a value that can be reproduced between runs.
  • N_Samples khuyên một mô hình dự báo xác suất để lấy mẫu càng nhiều giá trị dự báo để tính toán các lượng tử. Nó đại diện cho kích thước thứ hai của chuỗi thời gian xác suất đơn biến: các mẫu cho mỗi bước thời gian trên trục thời gian. advises a probabilistic forecast model to sample as many forecast values to compute the quantiles. It represents the second dimension of a univariate probabilistic time series: samples for each time step on the time axis.
  • Hình FigSize xác định kích thước mặc định cho các lô.default size for plots.
  • Các lượng tử liệt kê giới hạn dưới và trên cho dự báo xác suất.QUANTILES list the lower and upper bounds for the probabilistic forecast.
  • Các điều khiển phân chia liên tục mà tỷ lệ phần trăm của chuỗi thời gian nên được dành riêng để đào tạo.SPLIT controls which percentage of the time series should be reserved for training.
  • N_JOBS giới hạn các bộ xử lý tập lệnh có thể yêu cầu song song. Nếu được đặt thành -1, tất cả các bộ xử lý sẽ có sẵn cho nó. limits the processors the script can claim in parallel. If set to -1, all processors will be available to it.

Nói chung, tôi đề nghị ban đầu đặt các siêu âm chuyển gen - về cơ bản là kích thước ma trận của nó thành các giá trị thấp hơn so với các mặc định đề xuất. Các số mặc định cao có thể bắt nguồn từ việc tập trung vào các ứng dụng NLP trong Pytorch. Chuỗi thời gian thường được đặc trưng bởi ít tính năng hơn các vấn đề ngôn ngữ tự nhiên. Cài đặt rất cao dẫn đến ma trận lớn hơn theo cấp số nhân mà mô hình phải xử lý. Một mô hình lớn hơn nhiều so với cần thiết làm tăng nguy cơ quá mức.

4. Dữ liệu lộn xộn và thăm dò

4.1 Dữ liệu nguồn

Dữ liệu nguồn có sẵn để tải xuống trên Kaggle theo giấy phép miền công cộng CC0:

Tạo nhu cầu năng lượng hàng giờ và thời tiết | Kaggle

Tạo nhu cầu năng lượng hàng giờ và thời tiết | Kaggle, ảnh chụp màn hình của tác giả

Nguồn bao gồm hai tệp CSV, một cho dữ liệu năng lượng, dữ liệu còn lại có dữ liệu thời tiết.

Tệp năng lượng chứa

  • Hồ sơ hàng giờ về mức giá điện của Tây Ban Nha từ năm 2015 đến 2018, tính bằng euro mỗi giờ mega watt (€/mWh);
  • Phát điện theo loại nguồn gốc (than, khí, năng lượng gió, v.v.), trong MWH;
  • và nhu cầu năng lượng (tải tải trực tuyến), trong MWH.
  • Bộ dữ liệu năng lượng bao gồm 29 cột với 35.064 hàng.

Hồ sơ thời tiết cung cấp các hồ sơ hàng giờ của năm thành phố lớn của Tây Ban Nha từ năm 2015 đến 2018. Chúng tôi không có bộ dữ liệu thời tiết trên toàn quốc của quốc gia trung bình, do đó, năm khu vực đô thị, nằm ở trung tâm và ở các góc đối diện của Bán đảo Iberia, tương ứng, phải phục vụ như một mẫu đại diện cho tất cả Tây Ban Nha. Bộ dữ liệu thời tiết bao gồm 178.000 hàng, gấp khoảng năm lần trong bộ dữ liệu năng lượng vì nó được chia thành từng khoản giữa 5 thành phố.

Hình ảnh của tác giả của tác giả

Chúng tôi sẽ điều tra mức độ nhiệt độ, tốc độ gió hoặc độ ẩm nào tương quan với giá điện, bên cạnh ảnh hưởng của việc phát điện và tải nhu cầu khác nhau.

4.2 Dữ liệu năng lượng

Hàm Năng lượng DataFrame thông tin () cho thấy rằng chúng ta sẽ phải xử lý khá nhiều khoảng cách: các cột không chứa bất kỳ giá trị nào; và các cột khác không cung cấp bổ sung đầy đủ 35.064 giá trị không null.

Hình ảnh của tác giả

Trong dòng 2, chúng tôi bắt đầu bằng cách dịch cột thời gian của người Viking sang biến DateTime.

Một kiểm tra cho các hàng trùng lặp, trong dòng 6, mang lại kết quả âm.

Chúng tôi xác định cột DateTime là chỉ mục DataFrame.

Dòng 13 xác nhận rằng chúng tôi không cần phải chuyển đổi bất kỳ biến không định nghĩa nào thành các số.

Sau đó, chức năng trong các dòng 17 đến 23 tìm kiếm các khoảng trống và, nếu nó tìm thấy bất kỳ, gọi một âm mưu mất tích để hình dung cách chúng được trải ra trên các cột và hàng.

Hình ảnh của tác giả

Trong dòng 2, chúng tôi bắt đầu bằng cách dịch cột thời gian của người Viking sang biến DateTime.

Một kiểm tra cho các hàng trùng lặp, trong dòng 6, mang lại kết quả âm.

Chúng tôi xác định cột DateTime là chỉ mục DataFrame.

Hình ảnh của tác giả

Trong dòng 2, chúng tôi bắt đầu bằng cách dịch cột thời gian của người Viking sang biến DateTime.

Hình ảnh của tác giả

Trong dòng 2, chúng tôi bắt đầu bằng cách dịch cột thời gian của người Viking sang biến DateTime.

  • Một kiểm tra cho các hàng trùng lặp, trong dòng 6, mang lại kết quả âm.hours, influenced by varying electricity usage levels during daytime and business hours; and the generation of solar energy is limited to daylight hours
  • Chúng tôi xác định cột DateTime là chỉ mục DataFrame.: electricity consumption will be higher on workdays than on weekends
  • Dòng 13 xác nhận rằng chúng tôi không cần phải chuyển đổi bất kỳ biến không định nghĩa nào thành các số. seasonal demand variations, caused by temperature differences; and seasonally fluctuating power output of solar and wind power sources
Hình ảnh của tác giả

Trong dòng 2, chúng tôi bắt đầu bằng cách dịch cột thời gian của người Viking sang biến DateTime.

Một kiểm tra cho các hàng trùng lặp, trong dòng 6, mang lại kết quả âm.

Hình ảnh của tác giả

Trong dòng 2, chúng tôi bắt đầu bằng cách dịch cột thời gian của người Viking sang biến DateTime.

Hình ảnh của tác giả

Trong dòng 2, chúng tôi bắt đầu bằng cách dịch cột thời gian của người Viking sang biến DateTime.

  • Một kiểm tra cho các hàng trùng lặp, trong dòng 6, mang lại kết quả âm.
  • Tốc độ gió cao tới 133 km/h đã không được ghi nhận ở Tây Ban Nha trong thế kỷ này.

Các cột nhiệt độ trông kỳ quặc, với các giá trị trên 300 độ. Nhưng những giá trị này chỉ được thể hiện bằng Kelvin và do đó don don gợi ý các ngoại lệ rõ ràng.

Trong các dòng 2 đến 3, chúng tôi thả một số cột không liên quan hoặc dự phòng - những cột đại diện cho một bản tóm tắt bằng lời nói của các cột định lượng; và mưa đo trong 3 giờ qua, dự phòng miễn là chúng ta cũng đo mưa của giờ qua.

Trong các dòng 7 đến 8, chúng tôi chuyển đổi Kelvin sang độ C.

Các dòng 12 thành 19 Chuyển đổi các giá trị số thành float32.

Tiếp theo, chúng ta cần điều tra các ngoại lệ mà chúng ta đã thấy trong bảng thống kê mô tả.

Áp suất khí quyển là không thể tin được trong một vài ngày vào tháng 2 năm 2015. Phạm vi bình thường của chúng nằm trong một dải hẹp khoảng 1000 milibar.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Boxplots có thể giúp chúng tôi có được manh mối trực quan về các ngoại lệ.

Độ ẩm và nhiệt độ cho thấy một mô hình bình thường. Độ ẩm bằng 0, ở phía bên trái, có lẽ là một lỗi đo lường. Chúng tôi có thể xem xét để thay thế các giá trị bằng không bằng cách điền ngược hoặc điền chuyển tiếp chúng bằng các giá trị khác không lân cận. Nhưng trong bài tập này, tôi không thay đổi chúng.

Tuy nhiên, các hộp cho áp lực và tốc độ gió, cô lập một số ngoại lệ nghiêm trọng ở mức cao của thang đo.

Hình ảnh của tác giả

Ngoài ra, chúng ta có thể sử dụng các loại méo của Seaborn để xác định các ngoại lệ.

Đường cong nhiệt độ cho thấy một chu kỳ theo mùa bình thường, từ đóng băng lạnh mùa đông đến nóng mùa hè. Không có sự so sánh với dữ liệu của bên thứ ba, chúng tôi đã giành được các ngoại lệ ôn hòa rõ ràng.

Nhưng kurtosis cực đoan và độ lệch của sự phân bố áp lực và tốc độ gió cho thấy sự tồn tại của các ngoại lệ ở đuôi bên phải của chúng.

Để đối phó với các ngoại lệ, tôi thay thế các giá trị vượt quá ngưỡng được chọn bằng NULL, theo dòng 2 đến 5. Sau đó, dòng 6 lấp đầy các khoảng trống mới được tạo thông qua quá trình giao dịch ngược.

Các giá trị ngưỡng hợp lý dựa trên nhật ký Wikipedia của Tây Ban Nha cực đoan: Danh sách các hồ sơ áp lực khí quyển ở châu Âu - Wikipedia

Hình ảnh của tác giả

Tuy nhiên, các hộp cho áp lực và tốc độ gió, cô lập một số ngoại lệ nghiêm trọng ở mức cao của thang đo.

Hình ảnh của tác giả

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Boxplots có thể giúp chúng tôi có được manh mối trực quan về các ngoại lệ.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Boxplots có thể giúp chúng tôi có được manh mối trực quan về các ngoại lệ.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Boxplots có thể giúp chúng tôi có được manh mối trực quan về các ngoại lệ.

Độ ẩm và nhiệt độ cho thấy một mô hình bình thường. Độ ẩm bằng 0, ở phía bên trái, có lẽ là một lỗi đo lường. Chúng tôi có thể xem xét để thay thế các giá trị bằng không bằng cách điền ngược hoặc điền chuyển tiếp chúng bằng các giá trị khác không lân cận. Nhưng trong bài tập này, tôi không thay đổi chúng.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Boxplots có thể giúp chúng tôi có được manh mối trực quan về các ngoại lệ.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Boxplots có thể giúp chúng tôi có được manh mối trực quan về các ngoại lệ.

Độ ẩm và nhiệt độ cho thấy một mô hình bình thường. Độ ẩm bằng 0, ở phía bên trái, có lẽ là một lỗi đo lường. Chúng tôi có thể xem xét để thay thế các giá trị bằng không bằng cách điền ngược hoặc điền chuyển tiếp chúng bằng các giá trị khác không lân cận. Nhưng trong bài tập này, tôi không thay đổi chúng.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Hình ảnh của tác giả

Một ngoại lệ rõ ràng duy nhất xuất hiện trong số các tốc độ gió, vào ngày 11 tháng 5 năm 2017.

Hình ảnh của tác giả

Chúng ta có thể chọn giữa hai cách tiếp cận.

Người đầu tiên tiến hành với 28 tính năng ban đầu ít nhất tương quan vừa phải với giá. Giải pháp thay thế sẽ là một phân tích thành phần chính giúp giảm 66 tính năng xuống, hy vọng, chỉ là một số ít các kết hợp tuyến tính của chúng.

Tôi đã thử cả hai cách tiếp cận.

5.2.2 Thành phần chính

Phân tích thành phần chính chứng minh rằng có tới 30 thành phần sẽ cần thiết để đạt tỷ lệ phương sai tích lũy cao hơn 90%. Do đó, PCA không ngưng tụ các cột tính năng nhiều như chúng ta muốn.

Hình ảnh của tác giả

Hãy để tính toán tương quan của họ với mức giá và giới hạn đầu ra cho các thành phần có tương quan ít nhất 10% với nó.

Hình ảnh của tác giả

Chỉ có bảy trong số các thành phần thể hiện mối tương quan cao hơn 10% với mức giá điện. Số lượng thấp của chúng sẽ giúp việc đào tạo máy biến áp dễ dàng hơn.

Hình ảnh của tác giả

Máy biến áp đạt được độ chính xác tốt khi sử dụng các thành phần chính này để dự đoán bộ thử nghiệm: MAPE là 5,55%. Nhưng tôi đã quyết định tiến hành cách tiếp cận đầu tiên: 28 cột tính năng tương quan, mang lại một chiếc MAPE tốt hơn 4,54%.

Hình ảnh của tác giả

Có thể, chúng tôi có thể cải thiện phương pháp dựa trên PCA bằng cách bao gồm một số thành phần có tương quan yếu, dưới 10%. Nhưng vì khả năng giải thích, tôi thích làm việc với các tính năng ban đầu thay vì các kết hợp tuyến tính kém trong suốt của chúng trong vòng 15 hoặc 20 thành phần.

Trên GitHub, bạn có thể tìm thấy máy tính xách tay Jupyter của tôi cho cả hai cách tiếp cận: phương pháp sử dụng PCA và máy tính xách tay sử dụng các tính năng gốc.

Chúng tôi giảm chiều rộng của khung dữ liệu thành biến mục tiêu và 28 cột tính năng tương quan nhất của nó.

Hình ảnh của tác giả

5.2 Các tính năng DateTime

Tiếp theo, chúng tôi sẽ tham gia vào một số kỹ thuật tính năng và rút ra các biến thời gian bổ sung từ chỉ mục DateTime.

Máy biến áp sẽ thấy dễ dàng hơn để xác định các mẫu dọc theo trục thời gian khi chúng ta cô lập giờ, các ngày trong tuần và tháng trong các cột riêng biệt.

Một bản đồ nhiệt bảng Pivot cho thấy mức giá khác nhau giữa các ngày trong tuần và biến động theo mùa từ tháng này sang tháng khác. Chúng tôi quan sát sự khác biệt giữa ngày làm việc và cuối tuần, khi nhu cầu điện thấp hơn; Và chúng tôi thấy giá cao nhất trong những tháng cuối mùa hè.

Hình ảnh của tác giả

Một bảng trục thứ hai cho thấy sự thay đổi giá giữa ánh sáng ban ngày và ban đêm. Những giờ đầu giờ có lẽ cho thấy giấc ngủ trưa truyền thống của Tây Ban Nha, trong đó cường độ hoạt động kinh doanh giảm. Nhu cầu điện tiếp tục vào cuối buổi chiều và sau đó tăng lên trong thời gian ăn tối.

Hình ảnh của tác giả

Hai bản đồ nhiệt trực quan hóa ba biến thể của tính thời vụ mà mô hình dự báo sẽ phải học: giờ, các ngày trong tuần và tháng.

5,4 đối tượng chuỗi thời gian

5.4.1 Chuỗi thời gian mục tiêu: Giá

Phi tiêu hoạt động với các đối tượng chuỗi thời gian thay vì các mảng numpy hoặc sê -ri gấu trúc.

Dòng 8 chuyển đổi cột Giá của DataFrame thành chuỗi thời gian mục tiêu đơn biến: TS_P.

Các dòng 10 đến 17 thể hiện một vài thuộc tính mà chúng ta có thể có được từ bất kỳ đối tượng chuỗi thời gian nào.

Hình ảnh của tác giả

5.4.2 Tính năng đồng biến

Tiếp theo, chúng tôi chuyển đổi các cột tính năng của DataFrame thành chuỗi thời gian. Các tính năng được gọi là đồng biến của chuỗi thời gian đích. Trong phân tích hồi quy, chúng tôi sẽ gọi chúng là các biến hoặc hồi quy độc lập. Biến TS_COVF (Chuỗi thời gian của Hồi giáo: Tính năng Covariate) tạo thành một đối tượng chuỗi thời gian đa biến.

Hình ảnh của tác giả

Các đối tượng chuỗi thời gian của DARTS có thể được chuyển đổi trở lại thành các mảng Numpy, sê -ri gấu trúc hoặc các khung dữ liệu, khi cần thiết, bằng cách sử dụng các hàm phi tiêu sau đây.

Hình ảnh của tác giả của tác giả

5.4.3 Chuẩn bị các bộ đào tạo và kiểm tra

Chúng tôi áp dụng chức năng DARTS SPLOT_AFTER () cho các bộ đào tạo và kiểm tra riêng biệt. Trong ô trên cùng của Notebook Jupyter, chúng tôi đặt phần chia liên tục thành tỷ lệ phần trăm chúng tôi muốn dành cho việc đào tạo. Bộ thử nghiệm sẽ bao gồm 875 giờ hoặc 36,5 ngày từ cuối tháng 11 đến cuối tháng 12 năm 2018.

Chúng tôi bắt đầu với chuỗi thời gian mục tiêu của giá điện, TS_P.

Mạng lưới thần kinh có thể được dẫn dắt lạc lối nếu chúng tập luyện trên các tenxơ với các giá trị của các cường độ khác nhau. Do đó, chúng tôi khởi tạo lớp Scaler Darts, và phù hợp với chuỗi thời gian đào tạo, trong các dòng 11 đến 12. Sau đó, các dòng 13 đến 15 áp dụng cùng một máy đo được đào tạo cho cả ba chuỗi thời gian: đào tạo, kiểm tra và bộ dữ liệu đầy đủ.

Chuỗi thời gian được chuyển đổi ba được dán nhãn TS_TTRAIN, TS_TTEST và TS_T (Chuỗi thời gian: Chuỗi đào tạo biến đổi tập hợp, chuỗi thời gian: Bộ thử nghiệm biến đổi, chuỗi thời gian: Chuỗi Full Full Series).

Hình ảnh của tác giả

Tiếp theo, chúng tôi phân chia chuỗi tính năng giữa các bộ đào tạo và thử nghiệm.

Chúng tôi phù hợp với một bộ mở rộng cho chuỗi đào tạo và sau đó áp dụng nó vào loạt tính năng đào tạo và kiểm tra, theo dòng 4 đến 8.

Hình ảnh của tác giả

5.4.4 Các đồng biến DateTime

Bây giờ chúng tôi sẽ lấy được một số đồng biến DateTime với sự trợ giúp của các chức năng tiện ích của phi tiêu. Họ sẽ giúp máy biến áp dễ dàng học các mẫu tạm thời hơn, với các thành phần theo mùa phức tạp ẩn trong dữ liệu nguồn của chúng tôi.

  • Dòng 2 đến 4 có được giờ từ dấu thời gian. Lưu ý rằng tham số cho đến khi có tham số trong dòng 4 mở rộng đường chân trời đến 2019 2014010104, vượt quá cuối thử nghiệm vào năm 201812121231. Chúng tôi sẽ sử dụng các dấu thời gian bổ sung để chuẩn bị dự báo ngoài mẫu. Chúng tôi cũng có thể tạo chúng ở giai đoạn sau, sau khi đào tạo và thử nghiệm, nhưng nó tiết kiệm thời gian để chuẩn bị tất cả các đồng biến DateTime trong một lần.
  • Dòng 5 ngăn xếp các ngày trong tuần đến giờ.
  • Dòng 6 thêm các tháng.

Ba thành phần này sẽ phản ánh ba phần theo mùa mà chúng ta tìm thấy trong dữ liệu nguồn.

Trong dòng 9, một hàm hữu ích thêm một hiệp phương thứ tư: add_holiday () lấy tham số Country_code và gắn cờ các ngày lễ công cộng ở Tây Ban Nha.

Dòng 14 chia các hiệp phương sai giữa các bộ đào tạo và thử nghiệm.

Chúng ta cũng cần mở rộng quy mô các đồng biến này, trong các dòng 18 đến 22.

Hình ảnh của tác giả của tác giả

6. Thiết lập và đào tạo máy biến áp

TransformerModel lấy các siêu âm chúng tôi đã xác định trong ô Notebook ở phía trên.

Để tính toán một dự báo xác suất sẽ cung cấp cho chúng tôi một dải lượng tử xung quanh đường cong của các giá trị trung tâm dự đoán, chúng tôi chạy mô hình với khả năng tham số = lượng tử. Nếu không xác định mô hình khả năng, dự báo sẽ có tính xác định: nó sẽ trả về ước tính điểm thay vì quấn các điểm trung tâm giữa các dải không chắc chắn.

Sau khi định cấu hình mô hình, chúng tôi phù hợp với bộ đào tạo.

Hoặc cách khác, nếu chúng tôi đã đặt tải không đổi thành True, thì tập lệnh của chúng tôi sẽ tải một mô hình đã lưu vào bộ nhớ (dòng 2 đến 4). Một mô hình lưu bảo tồn trạng thái đào tạo của nó. Sau khi tải nó, chúng tôi sẽ không cần phải chạy lại quy trình phù hợp tốn thời gian trừ khi chúng tôi chọn làm như vậy.

7. Kiểm tra: Dự đoán bộ kiểm tra

Khi khóa đào tạo đã được hoàn thành, hoặc một mô hình được đào tạo trước đó đã được đưa vào bộ nhớ, chúng tôi có thể tạo dự báo cho 876 giờ của bộ thử nghiệm.

Hàm dự đoán () lấy theo tham số của nó, chân trời dự báo n: số bước thời gian-ở đây độ dài của bộ kiểm tra cho dự báo mẫu ban đầu của chúng tôi.

Tham số num_samples đặt tỷ lệ phần trăm mà các lượng tử dự báo sẽ được bắt nguồn. Chúng tôi đặt nó thành 100 ở đầu tập lệnh. Lưu ý rằng số lượng mẫu cao hơn không tăng đáng kể thời gian xử lý, dựa trên các thí nghiệm của tôi. Chức năng mất lượng tử đến mà không có nhiều chi phí tính toán.

Trong danh sách lượng tử, chúng tôi đã xác định tỷ lệ phần trăm mà chúng tôi muốn có được các dải dự báo: giá trị trung tâm (trung bình) và các cặp 10%/90%, 1%/99%và 20%/80%và tùy chọn các lượng tử khác. Mỗi lượng tử đại diện cho một chuỗi thời gian đơn biến.

Danh sách hiểu trong dòng 28 lặp lại tỷ lệ phần trăm trong các lượng tử danh sách và gọi hàm trợ giúp presq () trên mỗi phần trong số chúng. Sau đó, Predq thu thập các lượng tử dự báo dưới dạng các cột trong một dfy DataFrame mới.

Lượng tử hoặc trung bình 50% xứng đáng được chú ý đặc biệt. Giá trị trung tâm này là viết tắt của ước tính điểm mà chúng tôi sẽ có được từ mô hình dự báo xác định. Chúng tôi gán nó cho một biến chuỗi thời gian riêng biệt, TS_Q50.

Các số liệu hiệu suất Q50_RMSE và Q50_MAPE sẽ so sánh dự báo trung bình này TS_Q50 với giá thực tế của bộ thử nghiệm.

Hình ảnh của tác giả

5.4.4 Các đồng biến DateTime

Bây giờ chúng tôi sẽ lấy được một số đồng biến DateTime với sự trợ giúp của các chức năng tiện ích của phi tiêu. Họ sẽ giúp máy biến áp dễ dàng học các mẫu tạm thời hơn, với các thành phần theo mùa phức tạp ẩn trong dữ liệu nguồn của chúng tôi.

Hình ảnh của tác giả

5.4.4 Các đồng biến DateTime

Bây giờ chúng tôi sẽ lấy được một số đồng biến DateTime với sự trợ giúp của các chức năng tiện ích của phi tiêu. Họ sẽ giúp máy biến áp dễ dàng học các mẫu tạm thời hơn, với các thành phần theo mùa phức tạp ẩn trong dữ liệu nguồn của chúng tôi.

Dòng 2 đến 4 có được giờ từ dấu thời gian. Lưu ý rằng tham số cho đến khi có tham số trong dòng 4 mở rộng đường chân trời đến 2019 2014010104, vượt quá cuối thử nghiệm vào năm 201812121231. Chúng tôi sẽ sử dụng các dấu thời gian bổ sung để chuẩn bị dự báo ngoài mẫu. Chúng tôi cũng có thể tạo chúng ở giai đoạn sau, sau khi đào tạo và thử nghiệm, nhưng nó tiết kiệm thời gian để chuẩn bị tất cả các đồng biến DateTime trong một lần.

Dòng 5 ngăn xếp các ngày trong tuần đến giờ.

Hãy nhớ rằng chúng tôi đã mở rộng các đồng biến Datetime lên 2019 2014010104 trước khi chúng tôi đào tạo mô hình. Vì vậy, họ đáp ứng các yêu cầu.

Nhưng chúng ta vẫn cần nhận được dự đoán cho các đồng biến tính năng, đặc biệt là các biến thời tiết.

Nếu chúng tôi có dự báo thời tiết trong 12 giờ tới, chúng tôi có thể tải dữ liệu nguồn ngoại sinh này vào bộ nhớ và mở rộng chuỗi thời gian hiện tại của chúng tôi, Covf.

Nếu không có dữ liệu bên ngoài, chúng tôi sẽ cần chuẩn bị một dự báo về các biến tính năng. Chúng tôi có thể áp dụng một trong các phương thức cổ điển để tạo dự báo đơn biến cho từng biến tính năng: sarima, làm mịn theo cấp số nhân hoặc phương pháp theta chẳng hạn. Chúng tôi cũng có thể phù hợp với các mô hình biến áp bổ sung (không có đồng biến) cho từng tính năng.

Nhưng hãy để Lôi giữ cho nó đơn giản cho bài tập này: Chúng tôi cho rằng các tính năng thời tiết và nhu cầu năng lượng trên 2019 2014010101 sẽ tuân theo mô hình hàng giờ như họ đã trình bày trên 201812121231. Các giá trị đã biết của họ vào ngày 31 tháng 12 sẽ đại diện cho dự báo thời tiết và tải mô phỏng của chúng tôi cho ngày 01 tháng 1.

Trong dòng 2, chúng tôi khuyên mô hình dự đoán giá trong 12 giờ sau khi kết thúc bộ thử nghiệm.

Mô hình không được đào tạo trên bộ thử nghiệm, do đó, chân trời dự báo của nó bao gồm độ dài của bộ thử nghiệm cộng với giờ bổ sung (dòng 4).

Dòng 9 sử dụng hàm đuôi () của phi tiêu. Hàm đuôi trích xuất các giá trị của một vài bước thời gian trước từ chuỗi thời gian hiện có. Trong trường hợp của chúng tôi, phải mất 24 giờ cuối cùng của bộ thử nghiệm. Sau đó, hàm concatenate () nối thêm 24 giờ này đến hết bộ thử nghiệm. Điều này cung cấp cho chúng tôi các đồng biến tính năng mà chúng tôi cần để bao gồm 2019 201901.

Dòng 12 kết hợp thời gian và tính năng đồng biến trong một đối tượng chuỗi thời gian duy nhất, CoV_T_FUT.

Hình ảnh của tác giả

Hàm dự đoán () có các đồng biến mở rộng và chân trời dự báo N_FC và tạo ra các dự đoán. Họ bao gồm cả bộ thử nghiệm và giờ sáng 2019 201401010101: 888 giờ.

Hình ảnh của tác giả

Hàm dự đoán () có các đồng biến mở rộng và chân trời dự báo N_FC và tạo ra các dự đoán. Họ bao gồm cả bộ thử nghiệm và giờ sáng 2019 201401010101: 888 giờ.

Chúng tôi khởi tạo lại các biến chúng tôi đã sử dụng để thu thập kết quả của dự báo bộ thử nghiệm. Bây giờ chúng tôi lấp đầy DFY DataFrame với các lượng tử dự báo của dự báo mới, mở rộng.

Ảnh chụp màn hình hiển thị các hàng đầu tiên và cuối cùng của bộ thử nghiệm, theo sau là 12 hàng dự báo ngoài mẫu.

Hình ảnh của tác giả

Hàm dự đoán () có các đồng biến mở rộng và chân trời dự báo N_FC và tạo ra các dự đoán. Họ bao gồm cả bộ thử nghiệm và giờ sáng 2019 201401010101: 888 giờ.

Chúng tôi khởi tạo lại các biến chúng tôi đã sử dụng để thu thập kết quả của dự báo bộ thử nghiệm. Bây giờ chúng tôi lấp đầy DFY DataFrame với các lượng tử dự báo của dự báo mới, mở rộng.

Ảnh chụp màn hình hiển thị các hàng đầu tiên và cuối cùng của bộ thử nghiệm, theo sau là 12 hàng dự báo ngoài mẫu.

Chúng tôi hoàn thành bài tập hôm nay bằng cách vạch ra dự báo. Biểu đồ dòng cho thấy sự phù hợp hợp lý với mô hình theo mùa phức tạp của giá thực tế.

9. Kết luận

Chuỗi thời gian đa biến dự báo Python là gì?

Một chuỗi thời gian đa biến bao gồm nhiều hơn một biến phụ thuộc vào thời gian và mỗi biến không chỉ phụ thuộc vào các giá trị trước đây mà còn có một số phụ thuộc vào các biến khác.consist of more than one time-dependent variable and each variable depends not only on its past values but also has some dependency on other variables.

Arima có thể xử lý chuỗi thời gian đa biến không?

Arima chỉ có thể xử lý các thời gian đơn biến - bên cạnh điều này không hoạt động với ý tưởng để dự báo trên tất cả các biến như tôi muốn làm. - besides this doesn't work with the idea to forecast across all variables like I wanted to do.

Arima có thể được sử dụng để dự báo đa biến không?

ARIMAX là phiên bản mở rộng của mô hình ARIMA sử dụng dự báo chuỗi thời gian đa biến bằng nhiều chuỗi thời gian được cung cấp dưới dạng các biến ngoại sinh để dự báo biến phụ thuộc. using multiple time series which are provided as exogenous variables to forecast the dependent variable.

LSTM có thể được sử dụng cho chuỗi thời gian đa biến không?

Trong bài đăng trên blog này, chúng tôi muốn hiển thị các RNN dựa trên Ký ức ngắn hạn (LSTM) bao lâu để dự báo chuỗi thời gian đa biến bằng cách nghiên cứu trường hợp chia sẻ xe đạp, nơi chúng tôi dự đoán nhu cầu về xe đạp dựa trên nhiều tính năng đầu vào.can be used for multivariate time series forecasting by way of a bike sharing case study where we predict the demand for bikes based on multiple input features.