1. Giới thiệu chung về CDF

1.1. Định nghĩa CDF

CDF (Cumulative Distribution Function) – hàm phân phối tích lũy – là một trong những khái niệm nền tảng của thống kê và xác suất. Đối với một biến ngẫu nhiên (X), hàm CDF được định nghĩa là:

F_X(x) = P(X \leq x)

Nói cách khác, (F_X(x)) cho biết xác suất mà giá trị của biến ngẫu nhiên (X) không vượt quá một ngưỡng (x) nào đó. Đặc điểm quan trọng của CDF:
– Giá trị nằm trong khoảng (0, 1) cho mọi (x).
– Đơn điệu không giảm: nếu (x_1 < x_2) thì (F_X(x_1) \leq F_X(x_2)).
– Giới hạn: (\displaystyle \lim_{x\to -\infty} F_X(x) = 0) và (\displaystyle \lim_{x\to +\infty} F_X(x) = 1).

1.2. Tại sao cần vẽ CDF?

  • Hiểu rõ phân phối: CDF cho phép ta quan sát toàn bộ hình dạng phân phối, không chỉ trung bình hay độ lệch chuẩn.
  • So sánh mô hình: Khi có nhiều mô hình dự đoán, vẽ CDF giúp đánh giá nhanh các đặc tính như độ lệch, tail behavior.
  • Kiểm định giả thuyết: Nhiều kiểm định (Kolmogorov‑Smirnov, Anderson‑Darling) dựa trên sự khác biệt giữa CDF mẫu và CDF lý thuyết.
  • Ứng dụng thực tiễn: Trong rủi ro tài chính, bảo hiểm, đánh giá độ tin cậy của hệ thống, CDF là công cụ không thể thiếu.

2. Các loại biến ngẫu nhiên và CDF tương ứng

Cách Vẽ Cdf
Cách Vẽ Cdf
Loại biến Đặc điểm CDF
Biến rời rạc Giá trị chỉ nằm trong một tập hợp đếm được (ví dụ: số lần xuất hiện, số khách hàng) (F_X(x) = \sum_{k \le x} P(X = k))
Biến liên tục Giá trị có thể nằm trong một khoảng liên tục (ví dụ: chiều cao, thời gian) (F_X(x) = \int_{-\infty}^{x} f_X(t) dt) (trong đó (f_X) là hàm mật độ)
Biến hỗn hợp Kết hợp cả phần rời rạc và liên tục (F_X(x) = P(X \le x) = \sum_{k \le x} P(X = k) + \int_{-\infty}^{x} f_X(t) dt)

3. Bước chuẩn bị dữ liệu

3.1. Thu thập và làm sạch dữ liệu

  1. Thu thập: Đảm bảo dữ liệu đủ lớn (ít nhất vài trăm quan sát) để CDF có độ tin cậy.
  2. Xử lý missing values: Loại bỏ hoặc thay thế giá trị thiếu (ví dụ: trung bình, median, hoặc phương pháp imputation).
  3. Kiểm tra outliers: Đối với biến liên tục, outliers có thể làm biến dạng CDF; cân nhắc loại bỏ hoặc chuyển đổi (log, winsorize).

3.2. Lựa chọn phần mềm/ ngôn ngữ

  • Python (NumPy, Pandas, Matplotlib, Seaborn, SciPy)
  • R (base R, ggplot2, dplyr)
  • MATLAB hoặc Excel (đối với người không chuyên)

4. Cách vẽ CDF cho biến rời rạc

4.1. Công thức tính CDF rời rạc

Giả sử ta có một dãy giá trị (x_1, x_2, \dots, x_n) và tần suất tương ứng (f(x_i)). CDF tại một giá trị (x) là:

Cách Vẽ Cdf
Cách Vẽ Cdf

F(x) = \sum_{x_i \le x} \frac{f(x_i)}{N}

trong đó (N) là tổng số quan sát.

4.2. Thực hành với Python

import numpy as np
import matplotlib.pyplot as plt # Dữ liệu mẫu: số lần xuất hiện của một sự kiện
data = np.array(0, 1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 5, 6, 7, 8) # Tính tần suất
values, counts = np.unique(data, return_counts=True)
prob = counts / counts.sum()
cdf = np.cumsum(prob) # Vẽ
plt.step(values, cdf, where='post', label='CDF (rời rạc)')
plt.xlabel('Giá trị')
plt.ylabel('F(x)')
plt.title('CDF cho biến rời rạc')
plt.grid(True)
plt.legend()
plt.show()

4.3. Thực hành với R

library(ggplot2) data <- c(0,1,1,2,3,3,3,4,5,5,5,5,6,7,8)
df <- as.data.frame(table(data))
df$prop <- df$Freq / sum(df$Freq)
df$cdf <- cumsum(df$prop) ggplot(df, aes(x = as.numeric(data), y = cdf)) + step(lineend = "butt") + labs(title = "CDF cho biến rời rạc", x = "Giá trị", y = "F(x)") + theme_minimal()

5. Cách vẽ CDF cho biến liên tục

5.1. Phương pháp Empirical CDF (ECDF)

Empirical CDF (ECDF) là ước lượng không tham số của CDF dựa trên mẫu dữ liệu:

\hat{F}n(x) = \frac{1}{n} \sum}^{n} \mathbf{1}_{{X_i \le x}

5.2. Thực hành với Python (sử dụng statsmodels)

Cách Vẽ Cdf
Cách Vẽ Cdf
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm # Dữ liệu mẫu: thời gian phản hồi (giây)
np.random.seed(42)
data_cont = np.random.exponential(scale=2, size=500) # ECDF
ecdf = sm.distributions.ECDF(data_cont) x = np.linspace(min(data_cont), max(data_cont), 1000)
y = ecdf(x) plt.plot(x, y, marker='.', linestyle='none')
plt.xlabel('Thời gian (s)')
plt.ylabel('F(x)')
plt.title('Empirical CDF cho biến liên tục')
plt.grid(True)
plt.show()

5.3. Thực hành với R (sử dụng ggplot2)

library(ggplot2) set.seed(42)
data_cont <- rexp(500, rate = 0.5) # exponential distribution df <- data.frame(x = sort(data_cont), y = (1:length(data_cont))/length(data_cont)) ggplot(df, aes(x = x, y = y)) + geom_step() + labs(title = "Empirical CDF cho biến liên tục", x = "Giá trị", y = "F(x)") + theme_minimal()

5.4. So sánh ECDF với CDF lý thuyết

Nếu bạn biết phân phối lý thuyết (ví dụ: normal, exponential), có thể vẽ cả hai để đánh giá độ phù hợp.

import scipy.stats as stats # CDF lý thuyết (exponential)
theoretical_cdf = lambda x: stats.expon.cdf(x, scale=2) y_theo = theoretical_cdf(x) plt.plot(x, y, label='Empirical CDF')
plt.plot(x, y_theo, 'r--', label='Theoretical Exponential CDF')
plt.legend()
plt.show()

6. Các lưu ý khi vẽ CDF

Vấn đề Hậu quả Giải pháp
Dữ liệu không độc lập CDF có thể bị lệch, không phản ánh đúng phân phối Kiểm tra autocorrelation, nếu cần lấy mẫu ngẫu nhiên lại
Kích thước mẫu quá nhỏ ECDF gập ghềnh, không mượt Tăng kích thước mẫu hoặc dùng smoothing (kernel CDF)
Biến có outliers cực đoan Đường CDF “bị kéo” về phía cuối, mất chi tiết ở phần trung tâm Cắt hoặc biến đổi (log, Box‑Cox) trước khi vẽ
Biến hỗn hợp CDF có bước nhảy bất thường Phân tách thành phần rời rạc và liên tục, vẽ riêng rồi cộng lại

7. Kỹ thuật nâng cao

7.1. Kernel CDF (K-CDF)

Cách Vẽ Cdf
Cách Vẽ Cdf

Giống kernel density estimation (KDE) nhưng cho CDF:

\hat{F}h(x) = \frac{1}{n} \sum\right)}^{n} K!\left(\frac{x – X_i}{h

Trong đó (K) là hàm tích lũy của kernel (ví dụ: Gaussian). Thực hiện trong Python:

from statsmodels.nonparametric.kernel_density import KDEUnivariate kde = KDEUnivariate(data_cont)
kde.fit(kernel='gau', bw='silverman')
x_grid = np.linspace(min(data_cont), max(data_cont), 1000)
cdf_kde = kde.cdf(x_grid) plt.plot(x_grid, cdf_kde, label='Kernel CDF')
plt.legend()
plt.show()

7.2. Confidence Bands cho ECDF

Sử dụng công thức Dvoretzky–Kiefer–Wolfowitz (DKW) để tính khoảng tin cậy:

\epsilon = \sqrt{\frac{\ln(2/\alpha)}{2n}}

Với mức tin cậy (1-\alpha). Trong Python:

import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm alpha = 0.05
n = len(data_cont)
epsilon = np.sqrt(np.log(2/alpha)/(2n)) x = np.linspace(min(data_cont), max(data_cont), 1000)
ecdf = sm.distributions.ECDF(data_cont)(x) plt.step(x, ecdf, where='post', label='ECDF')
plt.fill_between(x, np.maximum(ecdf-epsilon,0), np.minimum(ecdf+epsilon,1), color='gray', alpha=0.3, label='95% confidence band')
plt.legend()
plt.show()

7.3. So sánh hai CDF bằng Kolmogorov‑Smirnov

Kiểm định K‑S đo độ lệch lớn nhất giữa hai CDF (mẫu vs. mẫu, hoặc mẫu vs. lý thuyết).

from scipy import stats # Giả sử data_cont2 là một mẫu khác
data_cont2 = np.random.exponential(scale=2.5, size=500) ks_stat, p_value = stats.ks_2samp(data_cont, data_cont2)
print(f"KS statistic = {ks_stat:.4f}, p-value = {p_value:.4f}")

Nếu p‑value < 0.05, hai phân phối được coi là khác nhau đáng kể.

8. Ứng dụng thực tiễn của CDF

8.1. Tài chính: VaR (Value at Risk)

VaR là quantile của phân phối lợi nhuận/thiệt hại. Để tìm VaR ở mức 95 %:

var_95 = np.percentile(losses, 95) # losses là mảng các mức lỗ

CDF giúp xác định quantile nhanh chóng.

8.2. Bảo hiểm: Tính toán mức bồi thường

Cách Vẽ Cdf
Cách Vẽ Cdf

Dựa vào CDF của mức thiệt hại, công ty bảo hiểm có thể tính xác suất thiệt hại vượt quá mức bảo hiểm.

8.3. Đánh giá mô hình Machine Learning

Trong mô hình phân loại, CDF của xác suất dự đoán (hoặc ROC curve) cung cấp thông tin về calibration. Calibration plot thực chất là so sánh ECDF dự đoán với CDF thực tế.

9. Tổng kết và lời khuyên

  • Hiểu khái niệm: CDF là công cụ mô tả toàn bộ phân phối, không chỉ trung bình hay độ lệch.
  • Lựa chọn đúng phương pháp: ECDF cho dữ liệu mẫu, Kernel CDF cho mượt mà, CDF lý thuyết khi có mô hình.
  • Kiểm tra chất lượng: Sử dụng confidence band và kiểm định K‑S để xác nhận độ tin cậy.
  • Áp dụng đa dạng: Từ tài chính, bảo hiểm, tới kiểm định mô hình ML – CDF luôn là “điểm tựa” quan trọng.

Hy vọng bài viết này đã cung cấp cho bạn một hướng dẫn toàn diện, chi tiết và thực tiễn về cách vẽ CDF. Hãy áp dụng ngay vào dự án của mình và khám phá những insights sâu sắc mà CDF có thể mang lại!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *