Skip to content

Feature Engineering

TÓM TẮT

FeatureEngineer (core/features.py, ~407 dòng) tạo 40+ features từ raw transaction data. Các features được nhóm thành 11 categories.

Bảng Features đầy đủ

1. Temporal Features (7)

FeatureMô tả
dowDay of week (0-6)
domDay of month (1-31)
is_weekendThứ 7 / Chủ nhật
is_startĐầu tháng (ngày 1-3)
is_endCuối tháng (ngày 28-31)
week_of_monthTuần trong tháng (1-5)
days_to_month_endSố ngày đến cuối tháng

2. Event Features (6)

FeatureMô tả
event_tierMức sự kiện (0-3)
is_payday_windowTrong window ngày lương
is_mid_monthGiữa tháng
is_holidayNgày lễ
event_day_weightTrọng số event (multiplier)
is_event_dayCó event hay không

3. Event Proximity Features (4)

FeatureMô tả
days_to_next_tier1Số ngày đến event tier 1 tiếp theo
days_since_last_tier1Số ngày từ event tier 1 gần nhất
days_to_next_eventSố ngày đến event tiếp theo
days_since_last_eventSố ngày từ event gần nhất

4. Lag Features (7)

FeatureMô tả
lag_1lag_56Chuỗi lag: 1, 2, 3, 7, 14, 28, 56 ngày

5. Rolling Window Features (3)

FeatureMô tả
roll_7Moving average 7 ngày
roll_14Moving average 14 ngày
roll_28Moving average 28 ngày

6. Event-Masked Rolling (3)

ĐẶC BIỆT

Rolling mean loại trừ event days để tránh spike contamination vào baseline.

FeatureMô tả
roll_7_maskedMA 7 ngày (không tính event days)
roll_14_maskedMA 14 ngày (không tính event days)
roll_28_maskedMA 28 ngày (không tính event days)

7. Exponentially Weighted Mean (2)

FeatureMô tả
ewm_7EWM span 7 ngày
ewm_14EWM span 14 ngày

8. Same-Event Lag (2)

FeatureMô tả
same_event_lagVolume cùng event năm trước (VD: 11.11.2025 → 11.11.2024)
same_event_lag_2yVolume cùng event 2 năm trước

9. Intermittent Demand (3)

FeatureMô tả
demand_frequencyTần suất có demand (0-1)
days_since_lastSố ngày từ lần có demand gần nhất
zero_streakChuỗi liên tiếp demand = 0

10. Discount & Scaling (3)

FeatureMô tả
discount_ratioTỷ lệ giảm giá
discount_ratio_7dTỷ lệ giảm giá 7 ngày gần nhất
base_demandNon-event mean (cho cross-learning)

11. SKU Classification (5+)

FeatureMô tả
sku_typedead / intermittent / lumpy / smooth / seasonal
is_dead, is_intermittent, etc.Binary flags
channel_countSố kênh bán
user_diversitySố users mua
recent_sales_30dTổng bán 30 ngày gần nhất

Pipeline Flow

python
# Trong ForecastPipeline
features_df = FeatureEngineer.create_all_features(
    df=daily_aggregated_data,
    calendar=event_calendar
)
# Output: DataFrame với tất cả 40+ features + target column

HIỆU NĂNG

expand_dates() có thể gây memory pressure cho dataset lớn (10,000 SKUs × 730 ngày = 7.3M rows). Xem IMP-06.

Tài liệu liên quan

BoxMe Forecast — Tài liệu kỹ thuật nội bộ