.. raw:: html .. _sec_statistics: Thống kê ======== .. raw:: html Để trở thành chuyên gia Học sâu hàng đầu, điều kiện tiên quyết cần có là khả năng huấn luyện các mô hình hiện đại với độ chính xác cao. Tuy nhiên, thường khó có thể biết được những cải tiến trong mô hình là đáng kể, hay chúng chỉ là kết quả của những biến động ngẫu nhiên trong quá trình huấn luyện. Để có thể thảo luận về tính bất định trong các giá trị ước lượng, chúng ta cần có hiểu biết về thống kê. .. raw:: html Tài liệu tham khảo đầu tiên về *thống kê* có thể được truy ngược về học giả người Ả Rập Al-Kindi từ thế kỉ thứ chín. Ông đã đưa ra những mô tả chi tiết về cách sử dụng thống kê và phân tích tần suất để giải mã những thông điệp mã hóa. Sau 800 năm, thống kê hiện đại trỗi dậy ở Đức vào những năm 1700, khi các nhà nghiên cứu tập trung vào việc thu thập và phân tích các dữ liệu nhân khẩu học và kinh tế. Hiện nay, khoa học thống kê quan tâm đến việc thu thập, xử lý, phân tích, diễn giải và biểu diễn dữ liệu. Hơn nữa, lý thuyết cốt lõi của thống kê đã được sử dụng rộng rãi cho nghiên cứu trong giới học thuật, doanh nghiệp và chính phủ. .. raw:: html Cụ thể hơn, thống kê có thể được chia thành *thống kê mô tả* (*descriptive statistic*) và *suy luận thống kê* (*statistical inference*). Thống kê mô tả đặt trọng tâm vào việc tóm tắt và minh họa những đặc trưng của một tập hợp những dữ liệu đã được quan sát - được gọi là *mẫu*. Mẫu được lấy ra từ một *tổng thể* (*population*), là biểu diễn của toàn bộ những cá thể, đồ vật hay sự kiện tương tự nhau mà thí nghiệm của ta quan tâm. Trái với thống kê mô tả, *suy luận thống kê* (*statistical inference*) dự đoán những đặc điểm của một tổng thể qua những *mẫu* có sẵn, dựa theo giả định phân phối mẫu là một biểu diễn tương đối hợp lý của phân phối tổng thể. .. raw:: html Bạn có thể tự hỏi: “Sự khác biệt cơ bản giữa học máy và thống kê là gì?”. Về căn bản, thống kê tập trung vào các vấn đề suy luận. Những vấn đề này bao gồm mô hình hóa mối quan hệ giữa các biến, ví dụ như suy luận nguyên nhân hoặc kiểm tra ý nghĩa thống kê của các tham số mô hình, ví dụ như phép thử A/B. Ngược lại, học máy đề cao việc dự đoán chính xác mà không yêu cầu lập trình một cách tường minh và hiểu rõ chức năng của từng tham số. .. raw:: html Trong chương này, chúng tôi sẽ giới thiệu ba loại suy luận thống kê: đánh giá và so sánh các bộ ước lượng, tiến hành kiểm định giả thuyết và xây dựng khoảng tin cậy. Các phương pháp này có thể giúp chúng ta suy luận những đặc tính của một tổng thể, hay nói cách khác, tham số thực :math:`\theta`. Nói ngắn gọn, chúng tôi giả sử tham số thực :math:`\theta` của một tổng thể cho trước là một số vô hướng. Việc mở rộng ra các trường hợp :math:`\theta` là một vector hoặc tensor là khá đơn giản nên chúng tôi sẽ không đề cập ở đây. .. raw:: html Đánh giá và So sánh các Bộ ước lượng ------------------------------------ .. raw:: html Trong thống kê, một *bộ ước lượng* là một hàm sử dụng những mẫu có sẵn để ước lượng giá trị thực của tham số :math:`\theta`. Ta gọi :math:`\hat{\theta}_n = \hat{f}(x_1, \ldots, x_n)` là ước lượng của :math:`\theta` sau khi quan sát các mẫu {:math:`x_1, x_2, \ldots, x_n`}. .. raw:: html Ta đã thấy nhiều ví dụ đơn giản của bộ ước lượng trong phần :numref:`sec_maximum_likelihood`. Nếu bạn có một số mẫu ngẫu nhiên từ phân phối Bernoulli, thì ước lượng hợp lý cực đại (*maximum likelihood estimate*) cho xác xuất của biến ngẫu nhiên có thể được tính bằng cách đếm số lần biến cố xuất hiện rồi chia cho tổng số mẫu. Tương tự, đã có một bài tập yêu cầu bạn chứng minh rằng ước lượng hợp lý cực đại của kỳ vọng phân phối Gauss với một số lượng mẫu cho trước là giá trị trung bình của tập mẫu đó. Các bộ ước lượng này dường như sẽ không bao giờ cho ra giá trị chính xác của tham số, nhưng với số lượng mẫu đủ lớn, ước lượng có được sẽ gần với giá trị thực. .. raw:: html Xét ví dụ sau, chúng tôi biểu diễn mật độ của phân phối Gauss với kỳ vọng là không và phương sai là một, cùng với một tập các mẫu lấy ra từ phân phối đó. Tọa độ :math:`y` được xây dựng sao cho tất các điểm đều có thể nhìn thấy được và mối quan hệ giữa mật độ mẫu và mật độ gốc của phân phối có thể được nhìn thấy rõ hơn. .. code:: python from d2l import mxnet as d2l from mxnet import np, npx import random npx.set_np() # Sample datapoints and create y coordinate epsilon = 0.1 random.seed(8675309) xs = np.random.normal(loc=0, scale=1, size=(300,)) ys = [np.sum(np.exp(-(xs[:i] - xs[i])**2 / (2 * epsilon**2)) / np.sqrt(2*np.pi*epsilon**2)) / len(xs) for i in range(len(xs))] # Compute true density xd = np.arange(np.min(xs), np.max(xs), 0.01) yd = np.exp(-xd**2/2) / np.sqrt(2 * np.pi) # Plot the results d2l.plot(xd, yd, 'x', 'density') d2l.plt.scatter(xs, ys) d2l.plt.axvline(x=0) d2l.plt.axvline(x=np.mean(xs), linestyle='--', color='purple') d2l.plt.title(f'sample mean: {float(np.mean(xs)):.2f}') d2l.plt.show() .. figure:: output_statistics_vn_b34841_1_0.svg .. raw:: html Có nhiều cách để tính toán một bộ ước lượng cho một tham số :math:`\hat{\theta}_n`. Trong phần này, ta sẽ điểm qua ba phương thức phổ biến để đánh giá và so sánh các bộ ước lượng: trung bình bình phương sai số, độ lệch chuẩn và độ chệch thống kê. .. raw:: html Trung bình Bình phương Sai số ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Có lẽ phép đo đơn giản nhất được sử dụng để đánh giá bộ ước lượng là *trung bình bình phương sai số (mean squared error – MSE)* (hay *mất mát :math:`l_2`*). Trung bình bình phương sai số của một bộ ước lượng được định nghĩa .. math:: \mathrm{MSE} (\hat{\theta}_n, \theta) = E[(\hat{\theta}_n - \theta)^2]. :label: eq_mse_est .. raw:: html Phương pháp này cho phép ta định lượng trung bình bình phương độ lệch so với giá trị thực. MSE là một đại lượng không âm. Nếu đã đọc :numref:`sec_linear_regression`, bạn sẽ nhận ra đây là hàm mất mát được sử dụng phổ biến nhất trong bài toán hồi quy. Như một phép đo để đánh giá bộ ước lượng, giá trị của nó càng gần không thì bộ ước lượng càng gần với tham số thực :math:`\theta`. .. raw:: html Độ chệch Thống kê ~~~~~~~~~~~~~~~~~ .. raw:: html MSE cung cấp một phép đo tự nhiên, nhưng ta có thể dễ dàng nghĩ tới các trường hợp khác nhau mà ở đó giá trị MSE sẽ lớn. Ta sẽ bàn tới hai trường hợp cơ bản đó là biến động của bộ ước lượng do sự ngẫu nhiên trong bộ dữ liệu, và sai số hệ thống của bộ ước lượng xảy ra trong quá trình ước lượng. .. raw:: html Đầu tiên, ta hãy đo sai số hệ thống. Với một bộ ước lượng :math:`\hat{\theta}_n`, biểu diễn toán học của *độ chệch thống kê* được định nghĩa .. math:: \mathrm{bias}(\hat{\theta}_n) = E(\hat{\theta}_n - \theta) = E(\hat{\theta}_n) - \theta. :label: eq_bias .. raw:: html Lưu ý rằng khi :math:`\mathrm{bias}(\hat{\theta}_n) = 0`, kỳ vọng của bộ ước lượng :math:`\hat{\theta}_n` sẽ bằng với giá trị thực của tham số. Trường hợp này, ta nói :math:`\hat{\theta}_n` là một bộ ước lượng không thiên lệch. Nhìn chung, một bộ ước lượng không thiên lệch sẽ tốt hơn một bộ ước lượng thiên lệch vì kỳ vọng của nó sẽ bằng với tham số thực. .. raw:: html | Tuy nhiên, những bộ ước lượng thiên lệch vẫn thường xuyên được sử dụng trong thực tế. | Có những trường hợp không tồn tại các bộ ước lượng không thiên lệch nếu không có thêm giả định, hoặc rất khó để tính toán. Đây có thể xem như một khuyết điểm lớn trong bộ ước lượng, tuy nhiên phần lớn các bộ ước lượng gặp trong thực tiễn đều ít nhất tiệm cận không thiên lệch theo nghĩa độ chệch có xu hướng tiến về không khi số lượng mẫu có được tiến về vô cực: :math:`\lim_{n \rightarrow \infty} \mathrm{bias}(\hat{\theta}_n) = 0`. .. raw:: html Phương sai và Độ lệch Chuẩn ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Tiếp theo, hãy cùng tính độ ngẫu nhiên trong bộ ước lượng. Nhắc lại từ :numref:`sec_random_variables`, *độ lệch chuẩn* (*standard deviation*) (còn được gọi là *sai số chuẩn* – *standard error*) được định nghĩa là căn bậc hai của phương sai. Chúng ta có thể đo được độ dao động của bộ ước lượng bằng cách tính độ lệch chuẩn hoặc phương sai của bộ ước lượng đó. .. math:: \sigma_{\hat{\theta}_n} = \sqrt{\mathrm{Var} (\hat{\theta}_n )} = \sqrt{E[(\hat{\theta}_n - E(\hat{\theta}_n))^2]}. :label: eq_var_est .. raw:: html So sánh :eq:`eq_var_est` và :eq:`eq_mse_est` là một việc quan trọng. Trong công thức này, thay vì so sánh với giá trị thực :math:`\theta` của tổng thể, chúng ta sử dụng :math:`E(\hat{\theta}_n)` là giá trị trung bình mẫu kỳ vọng. Do đó chúng ta không đo độ lệch của bộ ước lượng so với giá trị thực mà là độ dao động của chính bộ ước lượng. .. raw:: html Sự đánh đổi Độ chệch–Phương sai ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Cả hai yếu tố trên rõ ràng đều ảnh hưởng đến trung bình bình phương sai số. Một điều ngạc nhiên là chúng ta có thể chứng minh hai thành phần trên là *phân tách* của trung bình bình phương sai số. Điều này có nghĩa là ta có thể viết trung bình bình phương sai số bằng tổng của phương sai và bình phương độ chệch. .. math:: \begin{aligned} \mathrm{MSE} (\hat{\theta}_n, \theta) &= E[(\hat{\theta}_n - \theta)^2] \\ &= E[(\hat{\theta}_n)^2] + E[\theta^2] - 2E[\hat{\theta}_n\theta] \\ &= \mathrm{Var} [\hat{\theta}_n] + E[\hat{\theta}_n]^2 + \mathrm{Var} [\theta] + E[\theta]^2 - 2E[\hat{\theta}_n]E[\theta] \\ &= (E[\hat{\theta}_n] - E[\theta])^2 + \mathrm{Var} [\hat{\theta}_n] + \mathrm{Var} [\theta] \\ &= (E[\hat{\theta}_n - \theta])^2 + \mathrm{Var} [\hat{\theta}_n] + \mathrm{Var} [\theta] \\ &= (\mathrm{bias} [\hat{\theta}_n])^2 + \mathrm{Var} (\hat{\theta}_n) + \mathrm{Var} [\theta].\\ \end{aligned} .. raw:: html Chúng tôi gọi công thức trên là *sự đánh đổi độ chệch-phương sai*. Giá trị trung bình bình phương sai số có thể được phân tách chính xác thành ba nguồn sai số khác nhau: sai số từ độ chệch cao, sai số từ phương sai cao và sai số không tránh được (*irreducible error*). Sai số độ chệch thường xuất hiện ở các mô hình đơn giản (ví dụ như hồi quy tuyến tính), vì chúng không thể trích xuất những quan hệ đa chiều giữa các đặc trưng và đầu ra. Nếu một mô hình có độ chệch cao, chúng ta thường nói rằng nó *dưới khớp* (*underfitting*) hoặc là thiếu sự *uyển chuyển* như đã giới thiệu ở (:numref:`sec_model_selection`). Ngược lại, một mô hình *quá khớp* (*overfitting*) lại rất nhạy cảm với những dao động nhỏ trong dữ liệu. Nếu một mô hình có phương sai cao, chúng ta thường nói rằng nó *quá khớp* và thiếu *tổng quát hóa* như đã giới thiệu ở (:numref:`sec_model_selection`). Sai số không tránh được xuất phát từ nhiễu trong chính bản thân :math:`\theta`. Đánh giá các Bộ ước lượng qua Lập trình ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Vì độ lệch chuẩn của bộ ước lượng đã được triển khai trong MXNet bằng cách gọi ``a.std()`` của đối tượng ``ndarray`` “a”, chúng ta sẽ bỏ qua bước này và thực hiện tính độ chệch thống kê và trung bình bình phương sai số trong MXNet. .. code:: python # Statistical bias def stat_bias(true_theta, est_theta): return(np.mean(est_theta) - true_theta) # Mean squared error def mse(data, true_theta): return(np.mean(np.square(data - true_theta))) .. raw:: html Để minh họa cho phương trình sự đánh đổi độ chệch-phương sai, cùng giả lập một phân phối chuẩn :math:`\mathcal{N}(\theta, \sigma^2)` với :math:`10,000` mẫu. Ở đây, ta sử dụng :math:`\theta = 1` và :math:`\sigma = 4`. Với bộ ước lượng là một hàm số từ các mẫu đã cho, ở đây chúng ta sử dụng trung bình của các mẫu như là bộ ước lượng cho giá trị thực :math:`\theta` trong phân phối chuẩn này :math:`\mathcal{N}(\theta, \sigma^2)`. .. code:: python theta_true = 1 sigma = 4 sample_len = 10000 samples = np.random.normal(theta_true, sigma, sample_len) theta_est = np.mean(samples) theta_est .. parsed-literal:: :class: output array(0.9503336) .. raw:: html Cùng xác thực phương trình đánh đổi bằng cách tính tổng độ chệch bình phương và phương sai từ bộ ước lượng của chúng ta. Đầu tiên, tính trung bình bình phương sai số của bộ ước lượng: .. code:: python mse(samples, theta_true) .. parsed-literal:: :class: output array(15.781996) .. raw:: html Tiếp theo, chúng ta tính :math:`\mathrm{Var} (\hat{\theta}_n) + [\mathrm{bias} (\hat{\theta}_n)]^2` như dưới đây. Bạn có thể thấy đại lượng này gần giống với trung bình bình phương sai số đã tính ở trên. .. code:: python bias = stat_bias(theta_true, theta_est) np.square(samples.std()) + np.square(bias) .. parsed-literal:: :class: output array(15.781995) .. raw:: html Tiến hành Kiểm định Giả thuyết ------------------------------ .. raw:: html Chủ đề thường gặp nhất trong suy luận thống kê là kiểm định giả thuyết. Tuy kiểm định giả thuyết trở nên phổ biến từ đầu thế kỷ 20, trường hợp sử dụng đầu tiên được ghi nhận bởi John Arbuthnot từ tận những năm 1700. John đã theo dõi hồ sơ khai sinh trong 80 năm ở London và kết luận rằng mỗi năm nhiều bé trai được sinh ra hơn so với bé gái. Tiếp đó, phép thử nghiệm độ tin cậy ngày nay là di sản trí tuệ của Karl Pearson, người đã phát minh ra :math:`p`-value (*trị số p*) và bài kiểm định Chi bình phương Pearson (*Pearson’s chi-squared test*), William Gosses, cha đẻ của phân phối Student và Ronald Fisher, người đã khởi xướng giả thuyết gốc và kiểm định độ tin cậy. .. raw:: html Một bài *kiểm định giả thuyết* sẽ đánh giá các bằng chứng chống lại mệnh đề mặc định của một tổng thể. Chúng ta gọi các mệnh đề mặc định là *giả thuyết gốc - null hypothesis* :math:`H_0`, giả thuyết mà chúng ta cố gắng bác bỏ thông qua các dữ liệu quan sát được. Tại đây, chúng tả sử dụng :math:`H_0` là điểm bắt đầu cho việc thử nghiệm độ tin cậy thống kê. *Giả thuyết đối - alternative hypothesis* :math:`H_A` (hay :math:`H_1`) là mệnh đề đối lập với giả thuyết gốc. Giả thuyết gốc thường được định nghĩa dưới dạng khai báo mà mà ở đó nó ấn định mối quan hệ giữa các biến. Nó nên phản ánh mệnh đề một cách rõ ràng nhất, và có thể kiểm chứng được bằng lý thuyết thống kê. .. raw:: html Tưởng tượng bạn là một nhà hóa học. Sau hàng ngàn giờ nghiên cứu trong phòng thí nghiệm, bạn đã phát triển được một loại thuốc mới giúp cải thiện đáng kể khả năng hiểu về toán của con người. Để chứng minh sức mạnh ma thuật của thuốc, bạn cần kiểm tra nó. Thông thường, bạn cần một số tình nguyện viên sử dụng loại thuốc này để kiểm tra xem liệu nó có giúp họ học toán tốt hơn hay không. Bạn sẽ bắt đầu điều này như thế nào? .. raw:: html Đầu tiên, bạn cần cẩn thận lựa chọn ngẫu nhiên hai nhóm tình nguyện viên để đảm bảo rằng không có sự khác biệt đáng kể dựa trên các tiêu chuẩn đo lường được về khả năng hiểu toán của họ. Hai nhóm này thường được gọi là nhóm thử nghiệm và nhóm kiểm soát. *Nhóm thử nghiệm* (hay *nhóm trị liệu*) là nhóm người được cho sử dụng thuốc, trong khi *nhóm kiểm soát* được đặt làm chuẩn so sánh; tức là, họ có các yếu tố môi trường giống hệt với nhóm thử nghiệm trừ việc sử dụng thuốc. Bằng cách này, sự ảnh hưởng của tất cả các biến được giảm thiểu, trừ sự tác động của biến độc lập trong quá trình điều trị. .. raw:: html Thứ hai, sau một thời gian sử dụng thuốc, bạn cần đo khả năng hiểu toán của hai nhóm trên bằng tiêu chuẩn đo lường chung, ví dụ như cho các tình nguyện viên làm cùng một bài kiểm tra sau khi học một công thức toán mới. Sau đó bạn có thể thu thập kết quả năng lực của họ và so sánh chúng. Trong trường hợp này, giả thuyết gốc của chúng ta đó là không có sự khác biệt nào giữa hai nhóm, và giả thuyết đối là có sự khác biệt. .. raw:: html Quy trình trên vẫn chưa hoàn toàn chính quy. Có rất nhiều chi tiết mà bạn phải suy nghĩ cẩn trọng. Ví dụ, đâu là tiêu chuẩn đo lường thích hợp để kiểm tra khả năng hiểu toán? Bao nhiêu tình nguyện viên thực hiện bài kiểm tra là đủ để bạn có thể tự tin khẳng định sự hiệu quả của thuốc? Bài kiểm tra nên kéo dài trong bao lâu? Làm cách nào để bạn quyết định được có sự khác biệt rõ rệt giữa hai nhóm? Bạn chỉ quan tâm đến kết quả trung bình hay cả phạm vi biến thiên của các điểm số, v.v. .. raw:: html Bằng cách này, kiểm định giả thuyết cung cấp một khuôn khổ cho thiết kế thử nghiệm và cách suy luận về sự chắc chắn của những kết quả quan sát được. Nếu chứng minh được giả thuyết gốc khả năng rất cao là không đúng, thì chúng ta có thể tự tin bác bỏ nó. .. raw:: html Để hiểu rõ hơn về cách làm việc với kiểm định giả thuyết, chúng ta cần bổ sung thêm một số thuật ngữ và toán học hóa các khái niệm ở trên. .. raw:: html Ý nghĩa Thống kê ~~~~~~~~~~~~~~~~ .. raw:: html *Ý nghĩa thống kê* (*statistical significance*) đo xác suất lỗi khi bác bỏ giả thuyết gốc, :math:`H_0`, trong khi đúng ra không nên bác bỏ nó. .. math:: \text{ ý nghĩa thống kê }= 1 - \alpha = 1 - P(\text{ bác bỏ } H_0 \mid H_0 \text{ là đúng } ). .. raw:: html Đây còn được gọi là *lỗi loại I* hay *dương tính giả*. :math:`\alpha` ở đây là *mức ý nghĩa* và thường được chọn ở giá trị :math:`5\%`, tức là :math:`1-\alpha = 95\%`. Mức ý nghĩa thống kê còn có thể hiểu như mức độ rủi ro mà chúng ta chấp nhận khi bác bỏ nhầm một giả thuyết gốc chính xác. .. raw:: html :numref:`fig_statistical_significance` thể hiện các giá trị quan sát và xác suất của một phân phối chuẩn trong một bài kiểm định giả thuyết thống kê hai mẫu. Nếu các điểm dữ liệu quan sát nằm ngoài ngưỡng :math:`95\%`, chúng sẽ rất khó xảy ra dưới giả định của giả thuyết gốc. Do đó, giả thuyết gốc có điều gì đó không đúng và chúng ta sẽ bác bỏ nó. .. raw:: html .. _fig_statistical_significance: .. figure:: ../img/statistical-significance.svg Ý nghĩa thống kê. .. raw:: html Năng lực Thống kê ~~~~~~~~~~~~~~~~~ .. raw:: html *Năng lực thống kê* (hay còn gọi là *độ nhạy*) là xác suất bác bỏ giả thuyết gốc, :math:`H_0`, biết rằng nó nên bị bác bỏ, tức là: .. raw:: html .. math:: \text{ năng lực thống kê }= 1 - \beta = 1 - P(\text{ không bác bỏ } H_0 \mid H_0 \text{ là sai } ). .. raw:: html Nhớ lại *lỗi loại I* là lỗi do bác bỏ giả thuyết gốc khi nó đúng, còn *lỗi loại II* xảy ra do không bác bỏ giả thuyết gốc khi nó sai. Lỗi loại II thường được kí hiệu là :math:`\beta`, vậy nên năng lực thống kê tương ứng là :math:`1-\beta`. .. raw:: html Một cách trực quan, năng lực thống kê có thể được xem như khả năng phép kiểm định phát hiện được một sai lệch thực sự với độ lớn tối thiểu nào đó, ở một mức ý nghĩa thống kê mong muốn. :math:`80\%` là một ngưỡng năng lực thống kê phổ biến. Năng lực thống kê càng cao, ta càng có nhiều khả năng phát hiện được những sai lệch thực sự. .. raw:: html Một trong những ứng dụng phổ biến nhất của năng lực thống kê là để xác định số lượng mẫu cần thiết. Xác suất bạn bác bỏ giả thuyết gốc khi nó sai phụ thuộc vào mức độ sai của nó (hay còn gọi là *kích thước ảnh hưởng - effect size*) và số lượng mẫu bạn có. Có thể đoán rằng sẽ cần một số lượng mẫu rất lớn để có thể phát hiện kích thước ảnh hưởng nhỏ với xác suất cao. Việc đi sâu vào chi tiết nằm ngoài phạm vi của phần phụ lục ngắn gọn này, nhưng đây là một ví dụ. Giả sử ta có giả thuyết gốc rằng các mẫu được lấy từ một phân phối Gauss với kỳ vọng là không và phương sai là một. Nếu ta tin rằng giá trị trung bình của tập mẫu gần với một, ta chỉ cần :math:`8` mẫu là có thể bác bỏ giả thuyết gốc với tỷ lệ lỗi chấp nhận được. Tuy nhiên, nếu ta cho rằng giá trị trung bình thực sự của tổng thể gần với :math:`0.01`, thì ta cần cỡ khoảng :math:`80000` mẫu để có thể phát hiện được sự sai lệch. .. raw:: html Ta có thể hình dung năng lực thống kê như một cái máy lọc nước. Trong phép so sánh này, một kiểm định với năng lực cao giống như một hệ thống lọc nước chất lượng tốt, loại bỏ được các chất độc trong nước nhiều nhất có thể. Ngược lại, các sai lệch nhỏ cũng giống các chất cặn bẩn nhỏ, một cái máy lọc chất lượng kém sẽ để lọt các chất bẩn nhỏ đó. Tương tự, nếu năng lực thống kê không đủ cao, phép kiểm định có thể không phát hiện được các sai lệch nhỏ. .. raw:: html Tiêu chuẩn Kiểm định ~~~~~~~~~~~~~~~~~~~~ .. raw:: html *Tiêu chuẩn kiểm định* :math:`T(x)` là một số vô hướng có khả năng khái quát một đặc tính nào đó của dữ liệu mẫu. Mục đích của việc đặt ra một tiêu chuẩn như vậy là để phân biệt các phân phối khác nhau và tiến hành kiểm định thống kê. Nhìn lại ví dụ về nhà hóa học, nếu ta muốn chỉ ra rằng một tổng thể có chất lượng tốt hơn một tổng thể khác, việc lấy giá trị trung bình làm tiêu chuẩn kiểm định có vẻ hợp lý. Các chọn lựa tiêu chuẩn kiểm định khác nhau có thể dẫn đến các phép kiểm định thống kê với năng lực thống kê khác nhau rõ rệt. .. raw:: html Thường thì :math:`T(X)` (phân phối của tiêu chuẩn kiểm định dưới giả thuyết gốc) sẽ (xấp xỉ) tuân theo một phân phối phổ biến như phân phối chuẩn, khi được xem xét dưới giả thuyết gốc. Nếu ta có thể chỉ rõ một phân phối như vậy, và sau đó tính tiêu chuẩn kiểm định trên tập dữ liệu, ta có thể yên tâm bác bỏ giả thuyết gốc nếu thống kê đó nằm xa bên ngoài khoảng mong đợi. Định lượng hóa ý tưởng này đưa ta đến với khái niệm trị số :math:`p` (*:math:`p`-values*). .. raw:: html Trị số :math:`p` ~~~~~~~~~~~~~~~~ .. raw:: html Trị số :math:`p` (hay còn gọi là *trị số xác suất*) là xác suất mà :math:`T(X)` lớn hơn hoặc bằng tiêu chuẩn kiểm định ta thu được, giả sử rằng giả thuyết gốc đúng, tức là: .. math:: p\text{-value} = P_{H_0}(T(X) \geq T(x)). .. raw:: html Nếu trị số :math:`p` nhỏ hơn hoặc bằng một mức ý nghĩa thống kê cố định :math:`\alpha` cho trước, ta có thể bác bỏ giả thuyết gốc. Còn nếu không, ta kết luận không có đủ bằng chứng để bác bỏ giả thuyết gốc. Với một phân phối của tổng thể, *miền bác bỏ* là khoảng chứa tất cả các điểm có trị số :math:`p` nhỏ hơn mức ý nghĩa thống kê :math:`\alpha`. .. raw:: html Kiểm định Một phía và Kiểm định Hai phía ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Thường thì có hai loại kiểm định ý nghĩa thống kê: kiểm định một phía và kiểm định hai phía. *Kiểm định một phía* (hay *kiểm định một đuôi*) có thể được áp dụng khi giả thuyết gốc và giả thuyết đối chỉ đi theo một hướng. Ví dụ, giả thuyết gốc có thể cho rằng tham số thực :math:`\theta` nhỏ hơn hoặc bằng một giá trị :math:`c`. Giả thuyết đối sẽ là :math:`\theta` lớn hơn :math:`c`. Nói cách khác, miền bác bỏ chỉ nằm ở một bên của phân phối mẫu. Trái với kiểm định một phía, *kiểm định hai phía* (hay *kiểm định hai đuôi*) có thể được áp dụng khi miền bác bỏ nằm ở cả hai phía của phân phối mẫu. Ví dụ cho trường hợp này có thể là một giả thuyết gốc cho rằng tham số thực :math:`\theta` bằng một giá trị :math:`c`. Giả thuyết đối lúc này sẽ là :math:`\theta` nhỏ hơn và lớn hơn :math:`c`. .. raw:: html Các bước Thông thường trong Kiểm định Giả thuyết ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Sau khi làm quen với các khái niệm ở trên, hãy cùng xem các bước kiểm định giả thuyết thông thường. .. raw:: html 1. Đặt câu hỏi và đưa ra giả thuyết gốc :math:`H_0`. 2. Chọn mức ý nghĩa thống kê :math:`\alpha` và năng lực thống kê (:math:`1 - \beta`). 3. Thu thập mẫu qua các thử nghiệm. Số lượng mẫu cần thiết sẽ phụ thuộc vào năng lực thống kê, và hệ số ảnh hưởng mong muốn. 4. Tính tiêu chuẩn kiểm định và trị số :math:`p`. 5. Quyết định chấp nhận hoặc bác bỏ giả thuyết gốc dựa trên trị số :math:`p` và mức ý nghĩa thống kê :math:`\alpha`. .. raw:: html Để tiến hành kiểm định giả thuyết, ta bắt đầu với việc định nghĩa giả thuyết gốc và mức rủi ro chấp nhận được. Sau đó ta tính tiêu chuẩn kiểm định của mẫu, lấy cực trị của tiêu chuẩn kiểm định làm bằng chứng để phủ định giả thuyết gốc. Nếu tiêu chuẩn kiểm định rơi vào miền bác bỏ, ta có thể bác bỏ giả thuyết gốc và ủng hộ giả thuyết đối. .. raw:: html Kiểm định giả thuyết áp dụng được trong nhiều tình huống như thử nghiệm lâm sàng (*clinical trials*) và kiểm định A/B. .. raw:: html Xây dựng khoảng Tin cậy ----------------------- .. raw:: html Khi ước lượng giá trị của tham số :math:`\theta`, sử dụng bộ ước lượng điểm như :math:`\hat \theta` bị hạn chế vì chúng không bao hàm sự bất định. Thay vào đó, sẽ tốt hơn nhiều nếu ta có thể tìm ra một khoảng chứa tham số :math:`\theta` thật sự với xác suất cao. Nếu bạn hứng thú với những khái niệm từ một thế kỷ trước như thế này, có lẽ bạn nên đọc cuốn “Outline of a Theory of Statistical Estimation Based on the Classical Theory of Probability” (*Đại cương về Lý thuyết Ước lượng Thống kê dựa trên Lý thuyết Xác suất Cổ điển*) của Jerzy Neyman :cite:`Neyman.1937`, người đã đưa ra khái niệm về khoảng tin cậy vào năm 1937. .. raw:: html Để có tính hữu dụng, khoảng tin cậy nên càng bé càng tốt với một mức độ chắc chắn cho trước. Hãy cùng xem xét cách tính khoảng tin cậy. .. raw:: html Định nghĩa ~~~~~~~~~~ .. raw:: html Về mặt toán học, *khoảng tin cậy* :math:`C_n` của tham số thực :math:`\theta` được tính từ dữ liệu mẫu sao cho: .. math:: P_{\theta} (C_n \ni \theta) \geq 1 - \alpha, \forall \theta. :label: eq_confidence .. raw:: html Với :math:`\alpha \in (0, 1)`, và :math:`1 - \alpha` được gọi là *mức độ tin cậy* hoặc *độ phủ* của khoảng đó. Nó cũng chính là hệ số :math:`\alpha` của mức ý nghĩa thống kê mà chúng ta đã bàn luận ở trên. .. raw:: html Chú ý rằng :eq:`eq_confidence` là về biến số :math:`C_n`, chứ không phải giá trị cố định :math:`\theta`. Để nhấn mạnh điều này, chúng ta viết :math:`P_{\theta} (C_n \ni \theta)` thay cho :math:`P_{\theta} (\theta \in C_n)`. .. raw:: html Diễn giải ~~~~~~~~~ .. raw:: html Rất dễ để cho rằng khoảng tin cậy :math:`95\%` tương đương với việc chắc chắn :math:`95\%` giá trị thật phân bố trong khoảng đó, tuy nhiên đáng buồn thay điều này lại không chính xác. Tham số thật là cố định và khoảng tin cậy mới là ngẫu nhiên. Vậy nên một cách diễn giải tốt hơn đó là nếu bạn tạo ra một số lượng lớn các khoảng tin cậy theo quy trình này, thì :math:`95\%` các khoảng được tạo sẽ chứa tham số thật. .. raw:: html Điều này nghe có vẻ tiểu tiết, nhưng lại có một ý nghĩa quan trọng trong việc diễn giải các kết quả. Cụ thể, chúng ta có thể thỏa mãn :eq:`eq_confidence` bằng cách tạo ra các khoảng *gần như chắc chắn* không chứa tham số thật, miễn là số lượng các khoảng này đủ nhỏ. Chúng ta kết thúc mục này bằng ba mệnh đề nghe hợp lý nhưng lại không chính xác. Thảo luận sâu hơn về các mệnh đề này có thể tham khảo thêm ở :cite:`Morey.Hoekstra.Rouder.ea.2016`. .. raw:: html - **Sai lầm 1**: Khoảng tin cậy hẹp cho phép chúng ta dự đoán các giá trị một cách chính xác. - **Sai lầm 2**: Các giá trị nằm trong khoảng tin cậy có nhiều khả năng là giá trị thực hơn là các giá trị nằm bên ngoài. - **Sai lầm 3**: Xác xuất một khoảng tin cậy :math:`95\%` chứa các giá trị thực là :math:`95\%`. .. raw:: html Có thể nói, các khoảng tin cậy là những đối tượng khó ước lượng. Tuy nhiên nếu như ta diễn giải chúng một cách rõ ràng, thì chúng có thể trở thành những công cụ quyền năng. .. raw:: html Một ví dụ về Gaussian ~~~~~~~~~~~~~~~~~~~~~ .. raw:: html Cùng bàn về ví dụ kinh điển nhất, khoảng tin cậy cho giá trị trung bình của một phân phối Gaussian với kỳ vọng và phương sai chưa xác định. Giả sử chúng ta thu thập :math:`n` mẫu :math:`\{x_i\}_{i=1}^n` từ phân phối Gaussian :math:`\mathcal{N}(\mu, \sigma^2)`. Chúng ta có thể ước lượng kỳ vọng và độ lệch chuẩn bằng công thức: .. math:: \hat\mu_n = \frac{1}{n}\sum_{i=1}^n x_i \;\text{và}\; \hat\sigma^2_n = \frac{1}{n-1}\sum_{i=1}^n (x_i - \hat\mu)^2. .. raw:: html Nếu bây giờ chúng ta xem xét biến ngẫu nhiên: .. math:: T = \frac{\hat\mu_n - \mu}{\hat\sigma_n/\sqrt{n}}, .. raw:: html Chúng ta có được một biến ngẫu nhiên theo *phân phối t Student trên* :math:`n - 1` *bậc tự do*. .. raw:: html Phân phối này đã được nghiên cứu rất chi tiết, và đã được chứng minh là khi :math:`n\rightarrow \infty`, nó xấp xỉ với một phân phối Gauss tiêu chuẩn, và do đó bằng cách nhìn vào bảng giá trị phân phối tích lũy Gauss, chúng ta có thể kết luận rằng giá trị :math:`T` nằm trong khoảng :math:`[-1.96, 1.96]` tối thiểu là :math:`95\%` các trường hợp. Với giá trị :math:`n` hữu hạn, khoảng tin cậy sẽ lớn hơn, nhưng chúng vẫn rõ ràng và thường được tính sẵn và trình bày thành bảng. .. raw:: html Do đó, chúng ta có thể kết luận với giá trị :math:`n` lớn: .. math:: P\left(\frac{\hat\mu_n - \mu}{\hat\sigma_n/\sqrt{n}} \in [-1.96, 1.96]\right) \ge 0.95. .. raw:: html Sắp xếp lại công thức này bằng cách nhân hai vế với :math:`\hat\sigma_n/\sqrt{n}` và cộng thêm :math:`\hat\mu_n`, ta có: .. math:: P\left(\mu \in \left[\hat\mu_n - 1.96\frac{\hat\sigma_n}{\sqrt{n}}, \hat\mu_n + 1.96\frac{\hat\sigma_n}{\sqrt{n}}\right]\right) \ge 0.95. .. raw:: html Như vậy chúng ta đã xác định được khoảng tin cậy :math:`95\%` cần tìm: .. math:: \left[\hat\mu_n - 1.96\frac{\hat\sigma_n}{\sqrt{n}}, \hat\mu_n + 1.96\frac{\hat\sigma_n}{\sqrt{n}}\right]. :label: eq_gauss_confidence .. raw:: html Không quá khi nói rằng :eq:`eq_gauss_confidence` là một trong những công thức sử dụng nhiều nhất trong thống kê. Hãy kết thúc thảo luận về thống kê của chúng ta bằng cách lập trình tìm khoảng tin cậy. Để đơn giản, giả sử chúng ta đang làm việc ở vùng tiệm cận. Khi :math:`N` nhỏ, nên xác định giá trị chính xác của ``t_star`` bằng phương pháp lập trình hoặc từ bảng tra phân phối tích lũy :math:`t` Student. .. code:: python # Number of samples N = 1000 # Sample dataset samples = np.random.normal(loc=0, scale=1, size=(N,)) # Lookup Students's t-distribution c.d.f. t_star = 1.96 # Construct interval mu_hat = np.mean(samples) sigma_hat = samples.std(ddof=1) (mu_hat - t_star*sigma_hat/np.sqrt(N), mu_hat + t_star*sigma_hat/np.sqrt(N)) .. parsed-literal:: :class: output (array(-0.07853346), array(0.04412608)) Tóm tắt ------- .. raw:: html - Thống kê tập trung vào các vấn đề suy luận, trong khi học sâu chú trọng vào đưa ra các dự đoán chuẩn xác mà không cần một phương pháp lập trình hay kiến thức rõ ràng. - Ba phương pháp suy luận thống kê thông dụng nhất: đánh giá và so sánh các bộ ước lượng, tiến hành kiểm định giả thuyết, và tạo các khoảng tin cậy. - Ba bộ ước lượng thông dụng nhất: độ chệch thống kê, độ lệch chuẩn, và trung bình bình phương sai số. - Một khoảng tin cậy là khoảng ước tính của tập tham số thực mà chúng ta có thể tạo ra bằng các mẫu cho trước. - Kiểm định giả thuyết là phương pháp để đánh giá các chứng cứ chống lại mệnh đề mặc định về một tổng thể. Bài tập ------- .. raw:: html 1. Cho :math:`X_1, X_2, \ldots, X_n \overset{\text{iid}}{\sim} \mathrm{Unif}(0, \theta)`, với “iid” là viết tắt của *phân phối độc lập và giống nhau - independent and identically distributed*. Xét bộ ước lượng :math:`\theta` dưới đây: .. math:: \hat{\theta} = \max \{X_1, X_2, \ldots, X_n \}; .. math:: \tilde{\theta} = 2 \bar{X_n} = \frac{2}{n} \sum_{i=1}^n X_i. - Tìm độ chệch thống kê, độ lệch chuẩn, và trung bình bình phương sai số của :math:`\hat{\theta}.` - Tìm độ chệch thống kê, độ lệch chuẩn, và trung bình bình phương sai số của :math:`\tilde{\theta}.` - Bộ ước lượng nào tốt hơn? 2. Trở lại ví dụ về nhà hóa học của chúng ta ở phần mở đầu, liệt kê 5 bước để tiến hành kiểm định giả thuyết hai chiều, biết mức ý nghĩa thống kê :math:`\alpha = 0.05` và năng lực thống kê :math:`1 - \beta = 0.8`. 3. Chạy đoạn mã lập trình khoảng tin cậy biết :math:`N=2` và :math:`\alpha = 0.5` với :math:`100` dữ liệu được tạo độc lập, sau đó vẽ đồ thị các khoảng kết quả (trường hợp này ``t_star = 1.0``). Ban sẽ thấy một vài khoảng rất nhỏ cách xa khoảng chứa giá trị kỳ vọng thực :math:`0`. Điều này có mâu thuẫn với việc diễn giải khoảng tin cậy không? Có đúng không khi sử dụng các khoảng nhỏ này để nói các ước lượng có độ chính xác cao? Thảo luận --------- - Tiếng Anh: `MXNet `__, `Pytorch `__, `Tensorflow `__ - Tiếng Việt: `Diễn đàn Machine Learning Cơ Bản `__ Những người thực hiện --------------------- Bản dịch trong trang này được thực hiện bởi: - Ngô Thế Anh Khoa - Phạm Hồng Vinh - Vũ Hữu Tiệp - Lê Khắc Hồng Phúc - Đoàn Võ Duy Thanh - Nguyễn Lê Quang Nhật - Mai Sơn Hải - Phạm Minh Đức - Nguyễn Cảnh Thướng - Nguyễn Văn Cường