Logo Zephyrnet

Tăng độ chính xác dự báo của bạn với phân cụm chuỗi thời gian

Ngày:

Chuỗi thời gian là chuỗi các điểm dữ liệu xảy ra theo thứ tự liên tiếp trong một khoảng thời gian. Chúng tôi thường phân tích những điểm dữ liệu này để đưa ra quyết định kinh doanh tốt hơn hoặc đạt được lợi thế cạnh tranh. Một ví dụ là Shimamura Music, người đã sử dụng Dự báo Amazon đến cải thiện tỷ lệ thiếu hụt và tăng hiệu quả kinh doanh. Một ví dụ tuyệt vời khác là Arneg, người đã sử dụng Dự báo để dự đoán nhu cầu bảo trì.

AWS cung cấp nhiều dịch vụ khác nhau phục vụ cho dữ liệu chuỗi thời gian ít mã/không mã, mà cả những người thực hành máy học (ML) và không sử dụng ML đều có thể sử dụng để xây dựng các giải pháp ML. Chúng bao gồm các thư viện và dịch vụ như AutoGluon, Canvas SageMaker của Amazon, Trình sắp xếp dữ liệu Amazon SageMaker, Amazon SageMaker Tự động láiDự báo Amazon.

Trong bài đăng này, chúng tôi tìm cách tách một tập dữ liệu chuỗi thời gian thành các cụm riêng lẻ thể hiện mức độ tương đồng cao hơn giữa các điểm dữ liệu của nó và giảm nhiễu. Mục đích là để cải thiện độ chính xác bằng cách đào tạo một mô hình toàn cầu có chứa cấu hình cụm hoặc có các mô hình cục bộ dành riêng cho từng cụm.

Chúng tôi khám phá cách trích xuất các đặc điểm, còn được gọi là Tính năng, đặc điểm, từ dữ liệu chuỗi thời gian bằng cách sử dụng thư viện TSFresh—một gói Python để tính toán một số lượng lớn các đặc điểm chuỗi thời gian—và thực hiện phân cụm bằng cách sử dụng Thuật toán K-Means được thực hiện trong thư viện scikit-learning.

Chúng tôi sử dụng Phân cụm chuỗi thời gian bằng TSFresh + KMeans máy tính xách tay, có sẵn trên của chúng tôi Repo GitHub. Chúng tôi khuyên bạn nên chạy sổ ghi chép này trên Xưởng sản xuất Amazon SageMaker, một môi trường phát triển tích hợp (IDE) dựa trên web dành cho ML.

Tổng quan về giải pháp

Phân cụm là một kỹ thuật ML không giám sát giúp nhóm các mục lại với nhau dựa trên số liệu khoảng cách. Khoảng cách Euclide được sử dụng phổ biến nhất cho các bộ dữ liệu không tuần tự. Tuy nhiên, do chuỗi thời gian vốn có một trình tự (dấu thời gian), khoảng cách Euclide không hoạt động tốt khi được sử dụng trực tiếp trên chuỗi thời gian vì nó bất biến đối với sự thay đổi thời gian, bỏ qua chiều thời gian của dữ liệu. Để được giải thích chi tiết hơn, hãy tham khảo Phân loại và phân cụm chuỗi thời gian với Python. Một số liệu khoảng cách tốt hơn hoạt động trực tiếp trên chuỗi thời gian là Độ cong thời gian động (DTW). Để biết ví dụ về phân cụm dựa trên số liệu này, hãy tham khảo Dữ liệu chuỗi thời gian theo cụm để sử dụng với Amazon Forecast.

Trong bài đăng này, chúng tôi tạo các tính năng từ tập dữ liệu chuỗi thời gian bằng thư viện TSFresh Python để trích xuất dữ liệu. TSFresh là một thư viện tính toán một số lượng lớn các đặc điểm chuỗi thời gian, bao gồm độ lệch chuẩn, lượng tử và entropy Fourier, trong số những thứ khác. Điều này cho phép chúng tôi loại bỏ chiều thời gian của tập dữ liệu và áp dụng các kỹ thuật phổ biến phù hợp với dữ liệu có định dạng phẳng. Ngoài TSFresh, chúng tôi cũng sử dụng Tiêu chuẩn, tiêu chuẩn hóa các tính năng bằng cách loại bỏ giá trị trung bình và chia tỷ lệ thành phương sai đơn vị và Phân tích thành phần chính (PCA) để thực hiện giảm kích thước. Chia tỷ lệ giúp giảm khoảng cách giữa các điểm dữ liệu, từ đó thúc đẩy tính ổn định trong quy trình đào tạo mô hình và việc giảm kích thước cho phép mô hình học hỏi từ ít tính năng hơn trong khi vẫn giữ được các xu hướng và mẫu chính, từ đó cho phép đào tạo hiệu quả hơn.

Tải dữ liệu

Đối với ví dụ này, chúng tôi sử dụng Tập dữ liệu II bán lẻ trực tuyến UCI và thực hiện các bước chuẩn bị và làm sạch dữ liệu cơ bản như được trình bày chi tiết trong Sổ tay chuẩn bị và làm sạch dữ liệu.

Trích xuất tính năng với TSFresh

Hãy bắt đầu bằng cách sử dụng TSFresh để trích xuất các tính năng từ bộ dữ liệu chuỗi thời gian của chúng tôi:

from tsfresh import extract_features
extracted_features = extract_features( df_final, column_id="StockCode", column_sort="timestamp")

Lưu ý rằng dữ liệu của chúng tôi đã được chuyển đổi từ chuỗi thời gian thành bảng so sánh StockCode giá trị so với Feature values.

bảng tính năng

Tiếp theo, chúng tôi thả tất cả các tính năng với n/a các giá trị bằng cách sử dụng dropna phương pháp:

extracted_features_cleaned=extracted_features
extracted_features_cleaned=extracted_features_cleaned.dropna(axis=1)

Sau đó, chúng tôi mở rộng các tính năng bằng cách sử dụng StandardScaler. Các giá trị trong các tính năng được trích xuất bao gồm cả giá trị âm và dương. Vì vậy, chúng tôi sử dụng StandardScaler thay vì Bộ chia tỷ lệ tối thiểu:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
extracted_features_cleaned_std = scaler.fit_transform(extracted_features_cleaned)

Chúng tôi sử dụng PCA để giảm kích thước:

from sklearn.decomposition import PCA
pca = PCA()
pca.fit(extracted_features_cleaned_std)

Và chúng tôi xác định số lượng thành phần tối ưu cho PCA:

plt.figure(figsize=(20,10))
plt.grid()
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('number of components')
plt.ylabel('cumulative explained variance')

Tỷ lệ phương sai được giải thích là phần trăm phương sai được quy cho từng thành phần được chọn. Thông thường, bạn xác định số lượng thành phần cần đưa vào mô hình của mình bằng cách cộng dồn tỷ lệ phương sai đã giải thích của từng thành phần cho đến khi bạn đạt 0.8–0.9 để tránh khớp quá mức. Giá trị tối ưu thường xảy ra ở khuỷu tay.

Như được hiển thị trong biểu đồ sau, giá trị khuỷu tay xấp xỉ 100. Do đó, chúng tôi sử dụng 100 làm số lượng thành phần cho PCA.

PCA

Phân cụm với K-Means

Bây giờ, hãy sử dụng K-Means với thước đo khoảng cách Euclide để phân cụm. Trong đoạn mã sau, chúng tôi xác định số cụm tối ưu. Thêm nhiều cụm hơn làm giảm giá trị quán tính, nhưng nó cũng làm giảm thông tin chứa trong mỗi cụm. Ngoài ra, nhiều cụm hơn có nghĩa là nhiều mô hình cục bộ hơn để duy trì. Do đó, chúng tôi muốn có một kích thước cụm nhỏ với giá trị quán tính tương đối thấp. Heuristic khuỷu tay hoạt động tốt để tìm số lượng cụm tối ưu.

from sklearn.cluster import KMeans
wcss = []
for i in range(1,10): km = KMeans(n_clusters=i) km.fit(scores_pca) wcss.append(km.inertia_)
plt.figure(figsize=(20,10))
plt.grid()
plt.plot(range(1,10),wcss,marker='o',linestyle='--')
plt.xlabel('number of clusters')
plt.ylabel('WCSSS')

Biểu đồ sau đây trực quan hóa những phát hiện của chúng tôi.

Khuỷu tay

Dựa trên biểu đồ này, chúng tôi đã quyết định sử dụng hai cụm cho K-Means. Chúng tôi đã đưa ra quyết định này vì tổng bình phương trong cụm (WCSS) giảm với tốc độ cao nhất giữa một và hai cụm. Điều quan trọng là phải cân bằng giữa tính dễ bảo trì với hiệu suất và độ phức tạp của mô hình, bởi vì mặc dù WCSS tiếp tục giảm khi có nhiều cụm hơn, nhưng các cụm bổ sung sẽ làm tăng nguy cơ trang bị thừa. Hơn nữa, những thay đổi nhỏ trong tập dữ liệu có thể làm giảm độ chính xác một cách bất ngờ.

Điều quan trọng cần lưu ý là cả hai phương pháp phân cụm, K-Means với khoảng cách Euclidian (được thảo luận trong bài đăng này) và Thuật toán K-means với DTW, có điểm mạnh và điểm yếu của họ. Cách tiếp cận tốt nhất tùy thuộc vào bản chất dữ liệu của bạn và các phương pháp dự báo bạn đang sử dụng. Do đó, chúng tôi thực sự khuyên bạn nên thử nghiệm cả hai phương pháp và so sánh hiệu suất của chúng để hiểu rõ hơn về dữ liệu của bạn.

Kết luận

Trong bài đăng này, chúng tôi đã thảo luận về các kỹ thuật trích xuất đặc trưng và phân cụm mạnh mẽ cho dữ liệu chuỗi thời gian. Cụ thể, chúng tôi đã chỉ ra cách sử dụng TSFresh, một thư viện Python phổ biến để trích xuất tính năng, để xử lý trước dữ liệu chuỗi thời gian của bạn và thu được các tính năng có ý nghĩa.

Khi bước phân cụm hoàn tất, bạn có thể đào tạo nhiều mô hình Dự báo cho từng cụm hoặc sử dụng cấu hình cụm làm tính năng. Tham khảo đến Hướng dẫn dành cho nhà phát triển dự báo Amazon để biết thông tin về nhập dữ liệu, đào tạo dự đoántạo dự báo. Nếu có siêu dữ liệu mặt hàng và dữ liệu chuỗi thời gian có liên quan, thì bạn cũng có thể đưa những dữ liệu này làm bộ dữ liệu đầu vào để đào tạo trong Dự báo. Để biết thêm thông tin, hãy tham khảo Bắt đầu hành trình thành công của bạn với dự báo chuỗi thời gian với Amazon Forecast.

dự án


Về các tác giả

patrusheAleksandr Patrushev là Kiến trúc sư Giải pháp Chuyên gia về AI / ML tại AWS, có trụ sở tại Luxembourg. Anh ấy đam mê về đám mây và máy học cũng như cách họ có thể thay đổi thế giới. Ngoài công việc, anh ấy thích đi bộ đường dài, chơi thể thao và dành thời gian cho gia đình.

celimawsChong En Lim là Kiến trúc sư giải pháp tại AWS. Anh ấy luôn khám phá những cách giúp khách hàng đổi mới và cải thiện quy trình làm việc của họ. Khi rảnh rỗi, anh ấy thích xem phim hoạt hình và nghe nhạc.

thiếu máuEgor Miasnikov là Kiến trúc sư giải pháp tại AWS có trụ sở tại Đức. Anh ấy đam mê chuyển đổi kỹ thuật số trong cuộc sống, doanh nghiệp của chúng ta và thế giới, cũng như vai trò của trí tuệ nhân tạo trong quá trình chuyển đổi này. Ngoài công việc, anh ấy thích đọc sách phiêu lưu, đi bộ đường dài và dành thời gian cho gia đình.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img