Giảm lãng phí thực phẩm với tiếp cận phân cụm trong chuỗi thời gian biến đổi khí hậu | của Vitor Cerqueira

#Sự kiện ngày hôm nay: Phân tích chuỗi thời gian về nhu cầu thực phẩm và giảm lãng phí thực phẩm

Trong bài viết này, tác giả Vitor Cerqueira đã thực hiện phân tích nhóm chuỗi thời gian về nhu cầu thực phẩm và giới thiệu cách giảm lãng phí thực phẩm bằng cách phân cụm. Bài viết mã đầy đủ đã được chia sẻ trên Github.

Trong quá trình phân tích, tác giả đã sử dụng tập dữ liệu về doanh số bán thực phẩm hàng tuần ở Hoa Kỳ được Bộ Nông nghiệp Hoa Kỳ thu thập. Tập dữ liệu này chứa thông tin về doanh số bán thực phẩm theo danh mục sản phẩm và danh mục phụ. Tác giả đã phân chia chuỗi thời gian theo tiểu bang và sử dụng tổng doanh số bán hàng quốc gia trong từng thời kỳ để thực hiện phân tích.

Để phân tích chuỗi thời gian, tác giả đã sử dụng cách tiếp cận dựa trên tính năng để phân cụm chuỗi thời gian. Quá trình bao gồm hai bước chính là tóm tắt mỗi chuỗi thời gian thành một tập hợp các tính năng và áp dụng thuật toán phân cụm thông thường cho bộ tính năng. Tác giả đã sử dụng thư viện tsfel để trích xuất tính năng chuỗi thời gian.

Sau khi tiền xử lý một tập dữ liệu, tác giả đã sử dụng thuật toán K-means để phân cụm chuỗi thời gian. Tác giả đã thực hiện quy trình lựa chọn tính năng bằng cách chuẩn hóa, lựa chọn theo phương sai và theo tương quan để loại bỏ các tính năng dư thừa.

Tác giả cũng đã sử dụng phương pháp phân cụm theo thứ bậc để giải quyết vấn đề phân cụm chuỗi thời gian. Kết quả của mô hình phân cụm theo thứ bậc được hiển thị rõ nhất với biểu đồ dendrogram.

Bài viết của tác giả Vitor Cerqueira là một ví dụ tốt về cách sử dụng phân tích chuỗi thời gian để giảm lãng phí thực phẩm và cũng giúp chúng ta hiểu hơn về nhu cầu thực phẩm. #phan_tich_chuoi_thoi_gian #giảm_lãng_phí_thực_phẩm #dendrogram #K-Means

Nguồn: https://techtoday.co/time-series-for-climate-change-reducing-food-waste-with-clustering-by-vitor-cerqueira-jun-2023/

bản tin

Sed ut perspiciatis unde.

Đặt mua

Trong phần còn lại của bài viết này, chúng ta sẽ thực hiện phân tích nhóm chuỗi thời gian về nhu cầu thực phẩm. Bạn sẽ học cách:

  • tóm tắt một tập hợp các chuỗi thời gian bằng cách sử dụng trích xuất tính năng;
  • sử dụng K-Means và phương pháp phân cấp để phân cụm chuỗi thời gian.

Mã đầy đủ có sẵn trên Github:

tập dữ liệu

Chúng tôi sẽ sử dụng chuỗi thời gian bán hàng thực phẩm hàng tuần do Bộ Nông nghiệp Hoa Kỳ thu thập. Tập dữ liệu này chứa thông tin về doanh số bán thực phẩm theo danh mục sản phẩm và danh mục phụ. Chuỗi thời gian được phân chia theo tiểu bang, nhưng chúng tôi sẽ sử dụng tổng doanh số bán hàng quốc gia trong từng thời kỳ.

Dưới đây là một mẫu của tập dữ liệu:

Số lượng bán theo tiểu danh mục sản phẩm ở Hoa Kỳ (tính bằng triệu đô la)

Đây là toàn bộ dữ liệu trông như thế nào:

Số tiền bán hàng (hàng triệu đô la) cho các danh mục phụ thực phẩm khác nhau. Hình ảnh của tác giả.

Phân cụm chuỗi thời gian dựa trên tính năng

Chúng tôi sẽ sử dụng cách tiếp cận dựa trên tính năng để phân cụm chuỗi thời gian. Quá trình này bao gồm hai bước chính:

  1. Tóm tắt mỗi chuỗi thời gian thành một tập hợp các tính năng, chẳng hạn như giá trị trung bình;
  2. Áp dụng thuật toán phân cụm thông thường cho bộ tính năng, chẳng hạn như K-means.

Hãy thực hiện lần lượt từng bước.

Trích xuất tính năng bằng cách sử dụng tsfel

Chúng tôi bắt đầu bằng cách trích xuất một bộ số liệu thống kê để tóm tắt từng chuỗi thời gian. Mục tiêu là chuyển đổi từng chuỗi thành một tập hợp các tính năng nhỏ.

Có một số công cụ để trích xuất tính năng chuỗi thời gian. chúng tôi sẽ sử dụng tsfel, cung cấp một hiệu suất cạnh tranh so với các phương pháp khác (3).

Đây là cách bạn có thể sử dụng tsfel:

import pandas as pd
import tsfel

# get configuration
cfg = tsfel.get_features_by_domain()

# extract features for each food subcategory
features = col: tsfel.time_series_features_extractor(cfg, data(col))
for col in data

features_df = pd.concat(features, axis=0)

Quá trình này dẫn đến một số lượng lớn các tính năng. Một số trong số này có thể dư thừa, vì vậy chúng tôi thực hiện quy trình lựa chọn tính năng.

Dưới đây, chúng tôi áp dụng ba thao tác cho bộ tính năng:

  • chuẩn hóa: chuyển đổi các biến thành phạm vi giá trị 0–1;
  • lựa chọn theo phương sai: loại bỏ bất kỳ biến nào có phương sai bằng 0;
  • lựa chọn theo tương quan: loại bỏ bất kỳ biến nào có tương quan cao với biến hiện có khác.
from sklearn.preprocessing import MinMaxScaler
from sklearn.feature_selection import VarianceThreshold
from src.correlation_filter import correlation_filter

# normalizing the features
features_norm_df = pd.DataFrame(MinMaxScaler().fit_transform(features_df),
columns=features_df.columns)

# removing features with 0 variance
min_var = VarianceThreshold(threshold=0)
min_var.fit(features_norm_df)
features_norm_df = pd.DataFrame(min_var.transform(features_norm_df),
columns=min_var.get_feature_names_out())

# removing correlated features
features_norm_df = correlation_filter(features_norm_df, 0.9)
features_norm_df.index = data.columns

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

Sau khi tiền xử lý một tập dữ liệu, chúng tôi sẵn sàng phân cụm chuỗi thời gian. Chúng tôi tóm tắt từng chuỗi thành một nhóm nhỏ các tính năng không theo thứ tự. Vì vậy, chúng ta có thể sử dụng bất kỳ thuật toán thông thường nào để phân cụm. Một lựa chọn phổ biến là K-means.

Với K-means, chúng ta cần chọn số lượng cụm chúng ta muốn. Trừ khi chúng tôi có một số kiến ​​​​thức về miền, không có giá trị tiên nghiệm rõ ràng nào cho tham số này. Tuy nhiên, chúng ta có thể thực hiện cách tiếp cận dựa trên dữ liệu để chọn số lượng cụm. Chúng tôi kiểm tra các giá trị khác nhau và chọn giá trị tốt nhất.

Dưới đây, chúng tôi kiểm tra K-means với tối đa 24 cụm. Sau đó, chúng tôi chọn số lượng cụm tối đa hóa điểm bóng. Số liệu này định lượng sự gắn kết của các cụm thu được.

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

kmeans_parameters =
'init': 'k-means++',
'n_init': 100,
'max_iter': 50,

n_clusters = range(2, 25)
silhouette_coef = ()
for k in n_clusters:
kmeans = KMeans(n_clusters=k, **kmeans_parameters)
kmeans.fit(features_norm_df)

score = silhouette_score(features_norm_df, kmeans.labels_)

silhouette_coef.append(score)

Điểm bóng được tối đa hóa cho 5 cụm như trong hình bên dưới.

Điểm bóng cho tối đa 24 cụm. Hình ảnh của tác giả.

Chúng ta có thể vẽ một biểu đồ tọa độ song song để hiểu cấu hình của từng cụm. Đây là một ví dụ với một mẫu gồm ba tính năng:

Biểu đồ tọa độ song song với một mẫu tính năng. Hình ảnh của tác giả.

Chúng tôi cũng có thể sử dụng thông tin về các cụm để cải thiện các mô hình dự báo nhu cầu. Ví dụ, bằng cách xây dựng một mô hình cho mỗi cụm. Bài viết trong tài liệu tham khảo (5) là một ví dụ tốt về cách tiếp cận này.

phân cụm theo thứ bậc

Phân cụm theo thứ bậc là một giải pháp thay thế cho K-mean. Nó kết hợp các cặp cụm lặp đi lặp lại, dẫn đến cấu trúc giống như cây. Thư viện scipy cung cấp một triển khai cho phương pháp này.

import scipy.cluster.hierarchy as shc

# hierarchical clustering using the ward method
clustering = shc.linkage(features_norm_df, method='ward')

# plotting the dendrogram
dend = shc.dendrogram(clustering,
labels=categories.values,
orientation='right',
leaf_font_size=7)

Kết quả của mô hình phân cụm theo thứ bậc được hiển thị rõ nhất với biểu đồ dendrogram:

Trực quan hóa kết quả của phân cụm theo cấp bậc bằng chương trình dendrogram. Hình ảnh của tác giả

Chúng ta có thể sử dụng dendrogram để hiểu cấu hình của các cụm. Ví dụ, chúng ta có thể thấy rằng hầu hết các mặt hàng đóng hộp đều được phân nhóm (màu cam). Cam cũng kết hợp với hỗn hợp bánh kếp / bánh ngọt. Hai món này thường đi cùng nhau trong bữa sáng của mọi người.


[ad_2]

Leave a Reply

Your email address will not be published. Required fields are marked *