📌 QUY ĐỊNH NỘP BÀI (BẮT BUỘC ĐỌC TRƯỚC): - Nộp đúng 1 file
.mdduy nhất, đặt tên:MSSV_Họ Tên.md. - Giới hạn kích thước: tối đa 30KB (~600 dòng). - Không được xóa các tiêu đề section và nhãn[Điền vào đây]. - Phần hội thoại: KHÔNG dump toàn bộ log chat — chỉ chép 10 hội thoại tiêu biểu nhất.
| Trường | Thông tin |
|---|---|
| Họ và tên | Đỗ Nguyễn Nhật Minh |
| MSSV | 2321000336 |
| Session | 08 — Biến đếm (Poisson) & Ước lượng hợp tối đa (MLE) |
| Ngày nộp | 08/06/2026 |
| AI sử dụng | ChatGPT |
| Chỉ số | Giá trị |
|---|---|
| Tổng số prompt đã hỏi AI | 92 |
| Tổng thời gian tự học (giờ) | 7.5 |
| Số buổi tự học | 3 |
| Tiêu chí | Tự cho điểm (1–10) | Lý do ngắn gọn |
|---|---|---|
| Siêng năng | 9/10 | Ghi theo số prompt và thời gian học thật của bản thân. |
| Độ hiểu kiến thức | 8.5/10 | Tôi hiểu vì sao dữ liệu đếm cần Poisson, biết đọc IRR và kiểm tra overdispersion. |
| Độ sâu câu hỏi | 9/10 | Tôi không chỉ hỏi cách chạy code mà còn phản biện giả định Poisson, log-link, MLE và mô hình thay thế. |
Tôi hiểu rằng hồi quy Poisson phù hợp khi biến phụ thuộc là
biến đếm không âm như số giải thưởng, số tai nạn hoặc
số khiếu nại. Khác với OLS, Poisson không dự báo trực tiếp số đếm bằng
một đường thẳng có thể âm; mô hình dùng log link để bảo
đảm giá trị kỳ vọng luôn dương. Vì vậy, hệ số β không được đọc theo kiểu
“tăng thêm β đơn vị” mà phải chuyển sang exp(β), tức
Incident Rate Ratio. Ví dụ exp(β)=2.96
nghĩa là số đếm kỳ vọng cao gấp 2.96 lần, giữ các biến khác không
đổi.
Tôi còn cần luyện thêm cách lựa chọn giữa Poisson, Quasi-Poisson và Negative Binomial. Tôi cũng chưa hoàn toàn tự tin khi giải thích thuật toán tối ưu MLE bằng đạo hàm/Hessian, dù đã hiểu trực giác là tìm bộ tham số làm dữ liệu quan sát được “hợp lý nhất”.
Điều thú vị là Poisson có giả định rất mạnh: Mean = Variance. Chỉ cần phương sai lớn hơn trung bình rõ rệt, các p-value của mô hình Poisson có thể trở nên quá lạc quan nếu không điều chỉnh.
Câu hỏi tôi đã hỏi:
> Nếu biến phụ thuộc là số giải thưởng, tại sao tôi không dùng OLS
rồi làm tròn kết quả dự báo thành số nguyên?
Tóm tắt câu trả lời:
OLS không tôn trọng bản chất không âm và rời rạc của biến đếm; mô hình
có thể dự báo số âm hoặc giá trị không hợp lý. Poisson mô hình hóa trực
tiếp kỳ vọng của số đếm và dùng log link để bảo đảm dự báo dương. Làm
tròn dự báo OLS chỉ che lỗi ở đầu ra chứ không sửa sai mô hình thống kê
bên trong.
Điều tôi rút ra:
Không nên sửa hậu kỳ bằng làm tròn; phải chọn mô hình đúng với bản chất
dữ liệu ngay từ đầu.
Câu hỏi tôi đã hỏi:
> Giả định Mean = Variance của Poisson có ý nghĩa kinh doanh gì, hay
chỉ là điều kiện toán học?
Tóm tắt câu trả lời:
Mean = Variance phản ánh giả định các sự kiện đếm xảy ra độc lập và với
tốc độ ổn định. Trong thực tế, nếu học sinh giỏi thường được hỗ trợ tốt
hơn, có động lực hơn và cùng lúc đạt nhiều giải, dữ liệu sẽ gom cụm,
khiến phương sai lớn hơn trung bình. Khi đó Poisson vẫn là baseline tốt,
nhưng phải kiểm tra overdispersion.
Điều tôi rút ra:
Equidispersion là giả định có ý nghĩa hành vi, không chỉ là công
thức.
Câu hỏi tôi đã hỏi:
> Hàm log link trong Poisson có đang ép mối quan hệ giữa X và Y thành
tăng trưởng hàm mũ quá mạnh không?
Tóm tắt câu trả lời:
Log link làm cho tác động của biến độc lập lên kỳ vọng số đếm là dạng
nhân. Điều này phù hợp khi mỗi đơn vị tăng của X làm tỷ lệ xảy ra sự
kiện tăng theo phần trăm. Tuy nhiên, nếu thực tế có bão hòa hoặc hiệu
ứng giảm dần, cần kiểm tra thêm nonlinear terms, spline hoặc mô hình
khác.
Điều tôi rút ra:
Log link bảo đảm dự báo dương nhưng cũng là một giả định cấu trúc cần
phản biện.
Câu hỏi tôi đã hỏi:
> Vì sao hệ số math = 0.07015 lại phải đọc thành IRR =
1.0727 thay vì “số giải tăng 0.07”?
Tóm tắt câu trả lời:
Trong Poisson, hệ số nằm trên thang log của kỳ vọng. Khi lấy
exp(0.07015), ta được tỷ lệ nhân: mỗi điểm toán tăng thêm
làm số giải thưởng kỳ vọng tăng khoảng 7.27%, giữ chương trình học không
đổi. Đọc β như OLS sẽ sai vì Poisson không phải mô hình cộng tuyến tính
trên thang Y gốc.
Điều tôi rút ra:
Mọi diễn giải hệ số Poisson nên đi qua exp(β).
Câu hỏi tôi đã hỏi:
> Vì sao chương trình Academic có IRR gần 2.96 nhưng cần nói “giữ
điểm toán như nhau”?
Tóm tắt câu trả lời:
Mô hình có cả prog và math, nên hệ số
progAcademic là tác động tương đối của chương trình học khi
đã giữ math cố định. Nếu không nói điều này, người đọc có
thể hiểu sai rằng khác biệt do Academic hoàn toàn, trong khi một phần có
thể đến từ điểm toán khác nhau giữa các nhóm.
Điều tôi rút ra:
Diễn giải hồi quy luôn phải kèm điều kiện “các biến khác không đổi”.
Câu hỏi tôi đã hỏi:
> Likelihood khác Probability thế nào nếu cả hai đều dùng xác suất
trong công thức?
Tóm tắt câu trả lời:
Probability trả lời: nếu tham số đã biết, xác suất quan sát dữ liệu là
bao nhiêu. Likelihood đi ngược lại: với dữ liệu đã quan sát, bộ tham số
nào làm dữ liệu đó hợp lý nhất. Trong MLE, dữ liệu được giữ cố định, còn
tham số là thứ được thay đổi để tìm cực đại.
Điều tôi rút ra:
MLE là tư duy “lần ngược nguyên nhân từ dữ liệu đã thấy”.
Câu hỏi tôi đã hỏi:
> Tại sao tối đa hóa Log-Likelihood không làm thay đổi nghiệm so với
Likelihood gốc?
Tóm tắt câu trả lời:
Hàm log là hàm đơn điệu tăng, nên điểm nào làm Likelihood lớn nhất cũng
làm Log-Likelihood lớn nhất. Việc lấy log biến tích của nhiều xác suất
nhỏ thành tổng, giúp máy tính ổn định hơn và tránh underflow. Do đó log
không đổi nghiệm, chỉ làm bài toán dễ tối ưu hơn.
Điều tôi rút ra:
Log-Likelihood là thủ thuật tính toán nhưng bảo toàn bản chất tối
ưu.
Câu hỏi tôi đã hỏi:
> Nếu dispersiontest() cho p-value không nhỏ nhưng
var(Y) lớn hơn mean(Y), tôi nên tin cái
nào?
Tóm tắt câu trả lời:
Mean/Variance là kiểm tra mô tả thô của biến Y, chưa xét các biến giải
thích. Dispersion test và tỷ số deviance/df đánh giá phần dư sau khi mô
hình đã đưa prog và math vào. Vì vậy có thể có
variance thô lớn hơn mean, nhưng sau khi kiểm soát X, overdispersion
không còn nghiêm trọng.
Điều tôi rút ra:
Không kết luận overdispersion chỉ từ mean/variance thô; phải xem chẩn
đoán sau mô hình.
Câu hỏi tôi đã hỏi:
> Khi nào nên dùng Quasi-Poisson thay vì Negative Binomial?
Tóm tắt câu trả lời:
Quasi-Poisson điều chỉnh sai số chuẩn bằng hệ số phân tán, phù hợp khi
mục tiêu chính là suy luận hệ số và p-value. Negative Binomial thay đổi
cấu trúc phân phối bằng tham số phân tán, phù hợp khi muốn mô hình hóa
phân phối số đếm tốt hơn hoặc dự báo xác suất. Nếu overdispersion mạnh,
Negative Binomial thường hợp lý hơn.
Điều tôi rút ra:
Quasi-Poisson sửa suy luận; Negative Binomial sửa cấu trúc phân
phối.
Câu hỏi tôi đã hỏi:
> Nếu mô hình Poisson cho kết quả Academic rất mạnh, tôi có nên kết
luận chương trình Academic gây ra nhiều giải thưởng hơn không?
Tóm tắt câu trả lời:
Không nên kết luận nhân quả nếu dữ liệu quan sát không ngẫu nhiên. Học
sinh chọn Academic có thể vốn đã có động lực, nền tảng học tập hoặc
nguồn lực tốt hơn. Mô hình cho thấy liên hệ đã kiểm soát điểm toán,
nhưng chưa kiểm soát toàn bộ yếu tố nền.
Điều tôi rút ra:
Kết quả hồi quy mạnh không đồng nghĩa với bằng chứng nhân quả.
Hướng dẫn: Với câu code, trình bày code R kèm output. Với câu giải thích, trả lời bằng lời ít nhất 3–5 câu.
Câu 1. Tạo file exercise-session-08.qmd
trong thư mục SinhVien/Exercises/.
Bài làm: File exercise-session-08.qmd được
tạo để phân tích dữ liệu biến đếm bằng hồi quy Poisson.
Câu 2. Khai báo YAML header đầy đủ.
Bài làm:
---
title: "Bài Tập Buổi 08 — Biến đếm Poisson & MLE"
author: "Đỗ Nguyễn Nhật Minh — 2321000336"
date: today
format: html
---
Câu 3. Thiết lập chunk toàn cục.
Bài làm:
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
Câu 4. Nạp các thư viện cần thiết.
Bài làm:
library(tidyverse)
library(sandwich)
library(AER)
Câu 5. Đọc dữ liệu Awards Count bằng 2 cách.
Bài làm:
online_url <- "https://stats.idre.ucla.edu/stat/data/poisson_sim.csv"
offline_path <- "../../Data/poisson_sim.csv"
if (file.exists(offline_path)) {
df <- read.csv(offline_path)
} else {
df <- read.csv(online_url)
}
dim(df)
Output
[1] 200 4
Câu 6. Kiểm tra cấu trúc dữ liệu.
Bài làm:
str(df)
glimpse(df)
Output rút gọn
'data.frame': 200 obs. of 4 variables:
$ id : int
$ num_awards: int
$ prog : int
$ math : int
Rows: 200; Columns: 4
Câu 7. Nhận diện biến mục tiêu và biến độc
lập.
Bài làm: Biến mục tiêu là num_awards, thể
hiện số giải thưởng đạt được, đây là biến đếm nguyên không âm. Biến độc
lập gồm prog là loại chương trình học và math
là điểm toán. Vì num_awards nhận các giá trị 0, 1, 2, 3…
nên mô hình Poisson phù hợp hơn OLS.
Câu 8. Chuyển prog thành factor và đặt
General làm tham chiếu.
Bài làm:
df$prog <- factor(
df$prog,
levels = c(1, 2, 3),
labels = c("General", "Academic", "Vocational")
)
df$prog <- relevel(df$prog, ref = "General")
table(df$prog)
Output
General Academic Vocational
45 105 50
Câu 9. Kiểm tra mean và variance của
num_awards.
Bài làm:
mean(df$num_awards)
var(df$num_awards)
Output
[1] 0.63
[1] 1.108643
Nhận xét: Phương sai thô lớn hơn trung bình, gợi ý
dữ liệu có thể có overdispersion. Tuy nhiên, đây mới là kiểm tra mô tả
trên biến Y chưa kiểm soát prog và math, nên
cần chẩn đoán lại sau khi ước lượng mô hình.
Câu 10. Trực quan hóa phân phối biến đếm.
Bài làm:
ggplot(df, aes(x = num_awards)) +
geom_histogram(binwidth = 1, boundary = -0.5) +
labs(
title = "Phân phối số giải thưởng",
x = "Số giải thưởng",
y = "Tần số"
) +
theme_minimal()
Nhận xét: Phân phối lệch phải và tập trung nhiều ở giá trị 0. Đây là dạng rất thường gặp của dữ liệu đếm: phần lớn học sinh không nhận giải, trong khi chỉ một số ít có từ một giải trở lên.
Câu 11. Xây dựng mô hình Poisson Regression.
Bài làm:
model_p <- glm(num_awards ~ prog + math, data = df, family = poisson)
Câu 12. In tóm tắt mô hình và xác định biến có ý
nghĩa.
Bài làm:
summary(model_p)
Output
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -5.24712 0.65845 -7.969 1.60e-15 ***
progAcademic 1.08386 0.35825 3.025 0.00248 **
progVocational 0.36981 0.44107 0.838 0.40179
math 0.07015 0.01060 6.619 3.63e-11 ***
Null deviance: 287.67 on 199 df
Residual deviance: 189.45 on 196 df
AIC: 373.5
Phân tích output: progAcademic và
math có ý nghĩa thống kê rất rõ vì p-value lần lượt là
0.00248 và 3.63e-11. Điều này cho thấy, khi giữ các biến khác không đổi,
chương trình Academic và điểm toán đều liên hệ tích cực với số giải
thưởng kỳ vọng. Ngược lại, progVocational có p-value =
0.40179, chưa đủ bằng chứng thống kê để khẳng định khác biệt so với nhóm
General. Residual deviance giảm mạnh so với Null deviance, cho thấy mô
hình có thêm prog và math giải thích được một
phần đáng kể biến thiên của số giải thưởng.
Câu 13. Chuyển hệ số log thành Incident Rate
Ratio.
Bài làm:
exp(coef(model_p))
Output
(Intercept) progAcademic progVocational math
0.00526263 2.95606545 1.44745846 1.07267164
Diễn giải: Giữ điểm toán như nhau, học sinh chương
trình Academic có số giải thưởng kỳ vọng cao gấp 2.96
lần học sinh chương trình General, tức cao hơn khoảng
195.6%. Với mỗi điểm toán tăng thêm, số giải thưởng kỳ
vọng tăng gấp 1.0727 lần, tương đương tăng khoảng
7.27%, giữ chương trình học không đổi.
progVocational có IRR = 1.45 nhưng không có ý nghĩa thống
kê, nên không nên diễn giải như một kết luận chắc chắn.
Câu 14. Kiểm tra Overdispersion.
Bài làm:
dispersion_ratio <- deviance(model_p) / df.residual(model_p)
dispersion_ratio
AER::dispersiontest(model_p)
Output
[1] 0.9666
Overdispersion test
z = 0.53224, p-value = 0.2973
dispersion = 1.047254
Nhận xét: Tỷ số Residual Deviance/df khoảng 0.97,
rất gần 1. Kiểm định dispersiontest() có p-value = 0.2973,
lớn hơn 0.05, nên chưa có bằng chứng thống kê rõ ràng về
overdispersion sau khi đưa prog và math vào mô
hình. Điều này quan trọng vì nếu chỉ nhìn mean/variance thô, ta
có thể kết luận vội rằng dữ liệu quá phân tán. Ở đây, các biến giải
thích đã hấp thụ phần lớn dị biệt, khiến mô hình Poisson vẫn có thể chấp
nhận được.
Câu 15. Xây dựng mô hình Quasi-Poisson để so sánh độ
nhạy.
Bài làm:
model_qp <- glm(num_awards ~ prog + math, data = df, family = quasipoisson)
summary(model_qp)
Nhận xét: Quasi-Poisson không thay đổi hệ số ước lượng chính, nhưng điều chỉnh sai số chuẩn theo hệ số phân tán. Vì dispersion gần 1, kết quả suy luận của Quasi-Poisson không khác nhiều so với Poisson.
Câu 16. So sánh sai số chuẩn giữa Poisson và
Quasi-Poisson.
Bài làm:
se_compare <- data.frame(
Variable = names(coef(model_p)),
SE_Poisson = summary(model_p)$coefficients[, 2],
SE_QuasiPoisson = summary(model_qp)$coefficients[, 2]
)
round(se_compare, 4)
Output
Variable SE_Poisson SE_QuasiPoisson
(Intercept) 0.6585 0.6850
progAcademic 0.3583 0.3727
progVocational 0.4411 0.4589
math 0.0106 0.0110
Phân tích: Sai số chuẩn của Quasi-Poisson lớn hơn
một chút so với Poisson. Điều này làm các kiểm định thận trọng hơn,
nhưng mức thay đổi nhỏ nên kết luận chính vẫn giữ nguyên:
progAcademic và math vẫn là các yếu tố quan
trọng; progVocational vẫn chưa có ý nghĩa thống kê.
Câu 17. Dự báo số giải thưởng trung bình cho học
sinh Academic có điểm toán 60.
Bài làm:
new_data <- data.frame(
prog = factor("Academic", levels = levels(df$prog)),
math = 60
)
predict(model_qp, newdata = new_data, type = "response")
Output
1
1.046947
Diễn giải: Với học sinh thuộc chương trình Academic và điểm toán 60, số giải thưởng kỳ vọng là khoảng 1.05 giải. Đây là giá trị trung bình kỳ vọng, không có nghĩa học sinh đó chắc chắn nhận đúng 1 giải; trong dữ liệu đếm, một cá nhân cụ thể vẫn có thể nhận 0, 1, 2 hoặc nhiều giải hơn.
Câu 18. Vẽ số giải thưởng dự báo theo điểm toán và
chương trình học.
Bài làm:
grid <- expand.grid(
math = seq(min(df$math), max(df$math), length.out = 100),
prog = levels(df$prog)
)
grid$predicted <- predict(model_p, newdata = grid, type = "response")
ggplot(grid, aes(x = math, y = predicted, color = prog)) +
geom_line(linewidth = 1.1) +
labs(
title = "Số giải thưởng dự báo theo điểm toán và chương trình học",
x = "Điểm toán",
y = "Số giải thưởng kỳ vọng",
color = "Chương trình học"
) +
theme_minimal()
Câu 19. Nhận xét đồ thị.
Bài làm: Đường của nhóm Academic nằm cao nhất trên toàn
bộ miền điểm toán, phản ánh IRR của progAcademic lớn và có
ý nghĩa thống kê. Các đường dự báo tăng theo điểm toán do hệ số
math dương; vì dùng log link, mức tăng là dạng nhân nên
đường cong đi lên theo kiểu phi tuyến trên thang gốc của số giải thưởng.
Nhóm Vocational nằm cao hơn General nhưng khoảng cách này chưa đủ chắc
chắn về mặt thống kê vì p-value của progVocational không
nhỏ. Đồ thị giúp thấy rõ rằng điểm toán và chương trình học tác động
đồng thời: học sinh Academic với điểm toán cao là nhóm có số giải thưởng
kỳ vọng lớn nhất.
Câu 20. Báo cáo diễn giải kết quả phân tích (≥150
từ).
Bài làm:
Mô hình hồi quy Poisson cho thấy số giải thưởng của học sinh liên hệ rõ
với chương trình học và điểm toán. Với cùng mức điểm toán, học sinh
thuộc chương trình Academic có số giải thưởng kỳ vọng cao gấp khoảng
2.96 lần học sinh thuộc chương trình General, tương
đương tăng khoảng 195.6%. Đây là khác biệt lớn và có ý
nghĩa thống kê, cho thấy môi trường học thuật hoặc đặc điểm của nhóm học
sinh Academic gắn với khả năng đạt giải cao hơn. Điểm toán cũng có tác
động tích cực: mỗi điểm toán tăng thêm làm số giải thưởng kỳ vọng tăng
khoảng 7.27%, giữ chương trình học không đổi. Ngược
lại, chương trình Vocational có IRR lớn hơn 1 nhưng không có ý nghĩa
thống kê, nên không nên kết luận chắc rằng nhóm này vượt General. Kiểm
tra overdispersion cho thấy sau khi đưa prog và
math vào mô hình, chưa có bằng chứng quá phân tán nghiêm
trọng; vì vậy mô hình Poisson có thể dùng làm mô hình chính. Tuy nhiên,
kết quả vẫn cần được hiểu là mối liên hệ quan sát, không phải bằng chứng
nhân quả tuyệt đối, vì học sinh chọn chương trình Academic có thể khác
biệt sẵn về động lực, năng lực nền hoặc nguồn lực học tập.
Prompt 1 — Tình huống thực tế theo ngành:
Tôi đang mô hình hóa số yêu cầu bồi thường bảo hiểm trong một năm bằng Poisson Regression.
Dữ liệu có nhiều khách hàng không yêu cầu bồi thường và một số ít khách hàng có rất nhiều yêu cầu.
Hãy phân tích giúp tôi: khi nào Poisson còn phù hợp, khi nào cần Quasi-Poisson,
Negative Binomial hoặc Zero-Inflated Model? Hãy liên hệ đến overdispersion và excess zeros.
Tóm tắt trả lời: AI giải thích rằng Poisson phù hợp khi số yêu cầu phát sinh độc lập và phương sai xấp xỉ trung bình. Nếu phương sai lớn hơn trung bình do rủi ro không đồng nhất giữa khách hàng, Quasi-Poisson hoặc Negative Binomial phù hợp hơn. Nếu có quá nhiều số 0 vì nhiều khách hàng gần như không có khả năng yêu cầu bồi thường, nên cân nhắc Zero-Inflated Model. Tôi rút ra rằng kiểm tra overdispersion và số lượng zero phải đi trước lựa chọn mô hình.
Prompt 2 — Phản biện kỹ thuật & lỗi thường gặp:
Hãy phản biện cách làm: lấy log(num_awards + 1) rồi chạy OLS thay cho Poisson Regression.
Tôi muốn biết lỗi thống kê, lỗi diễn giải và hậu quả khi chuyển ngược dự báo về thang số đếm.
Tóm tắt trả lời: AI chỉ ra rằng log(y+1) + OLS làm mất bản chất phân phối rời rạc, không mô hình hóa đúng phương sai phụ thuộc vào kỳ vọng và gây lệch khi chuyển ngược do Jensen’s inequality. Hệ số OLS trên thang log cũng không giống IRR của Poisson. Cách này có thể dùng như mô tả thô, nhưng không nên thay thế Poisson khi mục tiêu là suy luận thống kê cho dữ liệu đếm.
Tôi vừa hoàn thành bài Poisson Regression và MLE. Hãy đánh giá bài của tôi theo 4 tiêu chí:
1. Tính đúng đắn thống kê: Mô hình `glm(..., family = poisson)` có phù hợp với biến đếm không?
2. Kiểm tra overdispersion: Tôi có phân biệt mean/variance thô với chẩn đoán sau mô hình không?
3. Diễn giải IRR: Tôi có diễn giải `exp(coef)` theo số nhân, không đọc hệ số như OLS không?
4. Trực quan hóa và báo cáo: Đồ thị predicted counts có giúp giải thích kết quả cho người đọc không?
Code/output trọng tâm:
- mean(num_awards)=0.63; var(num_awards)=1.108643
- model_p <- glm(num_awards ~ prog + math, family = poisson)
- progAcademic: beta=1.08386, p=0.00248, IRR=2.9561
- math: beta=0.07015, p=3.63e-11, IRR=1.0727
- dispersion ratio=0.9666; dispersiontest p-value=0.2973
- predict Academic, math=60: expected count=1.046947
| Tiêu chí | Minh chứng | Điểm |
|---|---|---|
| Tính đúng đắn thống kê | Chọn đúng Poisson cho biến đếm num_awards,
có mô hình Quasi-Poisson để kiểm tra độ nhạy. |
2.5/2.5 |
| Kiểm tra overdispersion | Có mean/variance thô, deviance/df và
dispersiontest(); kết luận không vội vàng. |
2.5/2.5 |
| Diễn giải IRR | Diễn giải Academic = 2.96 lần và math tăng 7.27% theo số nhân. | 2.5/2.5 |
| Trực quan hóa & báo cáo | Đồ thị predicted counts rõ theo math và
prog, báo cáo dài hơn 150 từ. |
2.5/2.5 |
| Tổng | Bài đáp ứng đầy đủ yêu cầu Ex8 và có phân tích output sâu. | 10.0/10.0 |