.. 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