python-044Đọc toàn bộ đề miễn phí

Chuẩn hóa & Lọc Nhóm Dữ liệu Thuần thục với GroupBy Transform và Filter

Trong phân tích tăng trưởng (Cohort Analysis), hành vi người dùng thường được phân tích theo từng nhóm đăng ký hoặc phân khúc khách hàng (cohort_col). Để so sánh công bằng giữa các…

PythonTrung bình25 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

pandasgroupbytransformfilterzscore normalization

Kiến thức tiên quyết: groupby syntax, transform vs apply, filter method, boolean indexing.

Nội dung đề bài

Mục tiêu kiến thức

  • Phân biệt bản chất giữa groupby.agg(), groupby.transform() và groupby.filter().
  • Sử dụng filter() để loại bỏ các nhóm không đáp ứng điều kiện quy mô mà không cần lặp thủ công.
  • Sử dụng transform() để broadcast kết quả thống kê (mean, std) của từng nhóm trở lại kích thước dòng ban đầu.
  • Xử lý các trường hợp đặc biệt: nhóm có độ lệch chuẩn bằng 0 hoặc nhóm chỉ có 1 phần tử.

Mô tả bài toán

Trong phân tích tăng trưởng (Cohort Analysis), hành vi người dùng thường được phân tích theo từng nhóm đăng ký hoặc phân khúc khách hàng (cohort_col). Để so sánh công bằng giữa các nhóm có quy mô và phân phối khác nhau, cần chuẩn hóa chỉ số đo lường (metric_col) về điểm Z-score nội nhóm.

Hãy viết hàm: standardize_cohort_metrics(df: pd.DataFrame, cohort_col: str, metric_col: str, min_size: int = 5, outlier_zscore_thresh: float = 3.0) -> pd.DataFrame

Yêu cầu thực hiện:

  • Kiểm tra đầu vào:
  • Cột cohort_col và metric_col phải có trong df.columns. Nếu không, ném ValueError("Columns not found in DataFrame").
  • Cột metric_col phải là kiểu số (is_numeric_dtype). Nếu không, ném TypeError("metric_col must be numeric").
  • Lọc nhóm theo quy mô (filter):
  • Loại bỏ toàn bộ các dòng thuộc về những nhóm có tổng số bản ghi nhỏ hơn min_size:

filtered_df = df.groupby(cohort_col).filter(lambda g: len(g) >= min_size)

  • Nếu sau khi lọc không còn dòng nào, trả về một DataFrame rỗng với đầy đủ các cột của bảng gốc kèm cột mới {metric_col}_zscore.
  • Chuẩn hóa Z-Score theo nhóm (transform):
  • Tính kỳ vọng μ và độ lệch chuẩn mẫu σ (ddof=1) cho từng cohort:

mu = filtered_df.groupby(cohort_col)[metric_col].transform('mean') sigma = filtered_df.groupby(cohort_col)[metric_col].transform('std')

  • Tính Z-score: Z = x - μσ.
  • Xử lý biên số học: Nếu σ == 0 hoặc σ bị NaN (do tất cả các giá trị trong nhóm bằng nhau), gán điểm Z-score bằng 0.0.
  • Gán giá trị vào cột mới: f"{metric_col}_zscore".
  • Loại bỏ ngoại lai nội nhóm:
  • Giữ lại các dòng thỏa mãn điều kiện: |Z| ≤ outlierzscorethresh.
  • Đầu ra:
  • Reset Index của DataFrame kết quả về dạng số tuần tự (reset_index(drop=True)).
  • Trả về DataFrame đã chuẩn hóa.

Input

  • Các tham số truyền vào hàm/lớp standardize_cohort_metrics hoặc dữ liệu đầu vào theo định dạng mô tả.

Output

  • Kết quả trả về của hàm/lớp standardize_cohort_metrics hoặc dữ liệu in ra màn hình theo đúng đặc tả.

Ràng buộc

  • Số dòng dữ liệu: 1 ≤ N ≤ 105.
  • min_size ≥ 1, outlier_zscore_thresh > 0.0.
  • Không làm thay đổi DataFrame df gốc.

Ví dụ 1

Input

standardize_cohort_metrics(data=[{'cohort': 'C1', 'score': 10.0}, {'cohort': 'C1', 'score': 12.0}, {'cohort': 'C1', 'score': 14.0}, {'cohort': 'C1', 'score': 16.0}, {'cohort': 'C1', 'score': 18.0}, {'cohort': 'C2', 'score': 90.0}, {'cohort': 'C2', 'score': 95.0}], cohort_col='cohort', metric_col='score', min_size=5, outlier_thresh=3.0)

Output

5

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

Ví dụ 2

Input

standardize_cohort_metrics(data=[{'cohort': 'A', 'val': 10.0}, {'cohort': 'A', 'val': 10.1}, {'cohort': 'A', 'val': 9.9}, {'cohort': 'A', 'val': 10.0}, {'cohort': 'A', 'val': 10.05}, {'cohort': 'A', 'val': 500.0}], cohort_col='cohort', metric_col='val', min_size=5, outlier_thresh=2.0)

Output

5

Giải thích

Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.