Bài 12

Câu hỏi Phỏng vấn DS

Ngân hàng câu hỏi phỏng vấn Data Science tổng hợp, kèm ý chính trả lời ngắn gọn và chính xác. Chia theo năm khối: Thống kê & Xác suất, Machine Learning, SQL & Coding, Case study nghiệp vụ, và Behavioral. Cuối bài là checklist ôn tập một tuần. Mục tiêu không phải học vẹt đáp án, mà nắm được bản chất để trả lời tự nhiên và đào sâu khi bị hỏi tiếp.

1. Thống kê & Xác suất
Nền tảng — hầu như luôn được hỏi

Q1. p-value là gì? p = 0.03 nghĩa là gì?

Là xác suất quan sát được kết quả (hoặc cực đoan hơn) nếu giả thuyết H0 đúng. p = 0.03 nghĩa là: giả sử H0 đúng, chỉ có 3% khả năng thu được dữ liệu cực đoan như vậy — thường ⇒ bác bỏ H0 ở mức α = 0.05. Lưu ý: p-value KHÔNG phải xác suất H0 đúng, và không đo độ lớn hiệu ứng.

Q2. Định lý giới hạn trung tâm (CLT)?

Khi cỡ mẫu đủ lớn (thường n ≥ 30), phân phối của trung bình mẫu tiệm cận phân phối chuẩn, bất kể phân phối gốc — với mean = mean tổng thể và độ lệch chuẩn = σ/√n. Đây là nền tảng cho hầu hết kiểm định & khoảng tin cậy.

Q3. Sai lầm loại I và loại II?

Type I (dương tính giả): bác bỏ H0 khi H0 đúng — xác suất = α. Type II (âm tính giả): không bác bỏ H0 khi H0 sai — xác suất = β; power = 1 − β. Giảm α thường làm tăng β; cân bằng tuỳ chi phí sai lầm nào tệ hơn (vd chẩn đoán ung thư sợ Type II).

Q4. Khoảng tin cậy 95% nghĩa là gì?

Nếu lặp lại thí nghiệm nhiều lần và tính CI mỗi lần, khoảng 95% số khoảng đó sẽ chứa giá trị thật của tham số. KHÔNG phải "có 95% xác suất giá trị thật nằm trong khoảng cụ thể này" (giải thích Bayesian, khác).

Q5. Định lý Bayes & ứng dụng?

P(A|B) = P(B|A)·P(A) / P(B). Cập nhật niềm tin (prior → posterior) khi có bằng chứng mới. Kinh điển: bài toán xét nghiệm — bệnh hiếm (prior thấp) khiến ngay cả xét nghiệm chính xác cao vẫn cho nhiều dương tính giả. Nền tảng của Naive Bayes classifier.

Q6. Thiết kế & đọc kết quả một A/B test?

Xác định metric & H0/H1 → tính cỡ mẫu (dựa trên MDE, power 80%, α 5%) → random assignment → chạy đủ thời gian (tránh peeking sớm, tính cả tính chu kỳ theo tuần) → kiểm định (t-test/z-test tỉ lệ) → xét cả ý nghĩa thống kê lẫn ý nghĩa thực tiễn. Coi chừng novelty effect và multiple testing.

Q7. Correlation vs Causation?

Tương quan chỉ nói hai biến biến thiên cùng nhau; không suy ra nhân quả vì có thể do biến gây nhiễu (confounder) hoặc trùng hợp. Muốn khẳng định nhân quả cần thí nghiệm ngẫu nhiên (RCT) hoặc phương pháp causal inference (IV, diff-in-diff, DAG).

Q8. Type I/II đánh đổi & các phân phối hay dùng?

Nắm được: Chuẩn (đối xứng, CLT), Nhị thức (số lần thành công), Poisson (số sự kiện/đơn vị thời gian), Mũ (thời gian giữa các sự kiện), Đều. Biết khi nào dùng t-test (n nhỏ, chưa biết σ) vs z-test (n lớn/biết σ), chi-square (biến phân loại), ANOVA (so >2 nhóm).

Mẹo trả lời: với các định nghĩa dễ hiểu sai (p-value, CI), luôn nói thêm "nó KHÔNG phải là..." — người phỏng vấn thường đang chờ đúng chỗ đó để phân loại ứng viên.
2. Machine Learning
Khái niệm cốt lõi & đánh đổi
Câu hỏiÝ chính trả lời
Bias–variance tradeoff?Bias cao = mô hình quá đơn giản, underfit. Variance cao = quá phức tạp, nhạy với nhiễu, overfit. Tổng lỗi = bias² + variance + nhiễu. Mục tiêu: cân bằng để lỗi trên tập test nhỏ nhất.
Overfitting là gì & cách chống?Mô hình học cả nhiễu của train nên kém trên dữ liệu mới (train acc >> test acc). Chống: thêm dữ liệu, cross-validation, regularization (L1/L2), giảm độ phức tạp, early stopping, dropout, ensembling, feature selection.
Precision vs Recall?Precision = TP/(TP+FP): trong số dự đoán dương, bao nhiêu đúng. Recall = TP/(TP+FN): trong số thực dương, bắt được bao nhiêu. F1 = trung bình điều hoà hai cái. Spam ưu tiên precision; sàng lọc ung thư ưu tiên recall.
ROC-AUC nghĩa là gì?ROC vẽ TPR theo FPR ở mọi ngưỡng. AUC = xác suất mô hình xếp một mẫu dương ngẫu nhiên cao hơn một mẫu âm ngẫu nhiên. 0.5 = ngẫu nhiên, 1.0 = hoàn hảo. Với dữ liệu mất cân bằng nặng, PR-AUC thông tin hơn.
Regularization L1 vs L2?L1 (Lasso) phạt tổng |w| → đẩy nhiều hệ số về đúng 0 ⇒ feature selection, mô hình thưa. L2 (Ridge) phạt tổng w² → co hệ số về gần 0 nhưng hiếm khi bằng 0, xử lý đa cộng tuyến tốt. ElasticNet kết hợp cả hai.
Random Forest vs Gradient Boosting?RF: nhiều cây độc lập, song song (bagging), giảm variance, ít tune, khó overfit. GBM (XGBoost/LightGBM): cây tuần tự, mỗi cây sửa lỗi cây trước (boosting), giảm bias, thường accuracy cao hơn nhưng nhạy hyperparameter & dễ overfit hơn.
Xử lý dữ liệu mất cân bằng (imbalanced)?Resampling (oversample lớp thiểu số/SMOTE, undersample lớp đa số), class weights, đổi metric (F1, PR-AUC thay vì accuracy), điều chỉnh ngưỡng quyết định, anomaly detection nếu quá hiếm. Không dùng accuracy làm metric.
Curse of dimensionality?Khi số chiều tăng, dữ liệu trở nên thưa thớt, khoảng cách mất ý nghĩa, cần lượng mẫu tăng theo hàm mũ. Ảnh hưởng nặng KNN/clustering. Khắc phục: giảm chiều (PCA), feature selection, regularization.
Generative vs Discriminative?Discriminative học trực tiếp P(y|X) — ranh giới quyết định (Logistic Regression, SVM). Generative học P(X,y) rồi suy P(y|X) qua Bayes, mô hình hoá cả cách sinh dữ liệu (Naive Bayes, GANs). Discriminative thường phân loại tốt hơn khi đủ dữ liệu.
Supervised vs Unsupervised vs Reinforcement?Supervised: có nhãn (phân loại/hồi quy). Unsupervised: không nhãn, tìm cấu trúc (clustering, PCA). Reinforcement: agent học qua thưởng/phạt khi tương tác môi trường.
Cross-validation để làm gì?Ước lượng khả năng tổng quát hoá đáng tin hơn 1 lần chia. K-fold chia K phần, luân phiên 1 phần làm validation. Dữ liệu mất cân bằng dùng StratifiedKFold; chuỗi thời gian dùng TimeSeriesSplit (không được xáo trộn tương lai).
Xử lý missing data?Hiểu cơ chế (MCAR/MAR/MNAR). Cách: xoá dòng/cột nếu ít, impute (mean/median/mode, KNN, model-based), thêm cờ "was_missing", hoặc dùng model tự xử lý null (LightGBM). Tránh impute gây leakage (fit trên train, transform test).
Câu chốt hay bị hỏi thêm: "Khi nào ưu tiên interpretability hơn accuracy?" — trong lĩnh vực có quy định (tín dụng, y tế) cần giải thích được quyết định (SHAP, hệ số hồi quy), đôi khi chấp nhận mô hình đơn giản hơn để minh bạch.
3. SQL & Coding
Truy vấn điển hình & pandas

Q1. Tìm mức lương cao thứ nhì (second highest salary).

-- Cách dùng subquery: an toàn khi có trùng lặp
SELECT MAX(salary) AS second_highest
FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);

-- Cách dùng window function (linh hoạt cho hạng N bất kỳ)
SELECT DISTINCT salary
FROM (
  SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
  FROM employees
) t
WHERE rnk = 2;

Q2. Top-N mỗi nhóm (top 3 sản phẩm bán chạy theo từng category).

SELECT category, product, revenue
FROM (
  SELECT category, product, revenue,
         ROW_NUMBER() OVER (
             PARTITION BY category
             ORDER BY revenue DESC) AS rn
  FROM sales
) t
WHERE rn <= 3;
-- ROW_NUMBER: hạng duy nhất | RANK: nhảy số khi bằng | DENSE_RANK: không nhảy

Q3. Khử trùng lặp (dedupe) — giữ 1 bản ghi mỗi email, mới nhất.

WITH ranked AS (
  SELECT *, ROW_NUMBER() OVER (
             PARTITION BY email
             ORDER BY created_at DESC) AS rn
  FROM users
)
SELECT * FROM ranked WHERE rn = 1;

Q4. Đếm số user hoạt động mỗi ngày & tỉ lệ giữ chân (retention) đơn giản.

-- DAU theo ngày
SELECT event_date, COUNT(DISTINCT user_id) AS dau
FROM events
GROUP BY event_date
ORDER BY event_date;

-- Self-join tìm user quay lại đúng ngày hôm sau
SELECT a.event_date,
       COUNT(DISTINCT b.user_id) * 1.0
         / COUNT(DISTINCT a.user_id) AS next_day_retention
FROM events a
LEFT JOIN events b
  ON a.user_id = b.user_id
 AND b.event_date = a.event_date + INTERVAL '1 day'
GROUP BY a.event_date;

Q5. INNER vs LEFT JOIN & bẫy với NULL/aggregate?

INNER chỉ giữ dòng khớp cả hai bảng; LEFT giữ toàn bộ bảng trái, phần không khớp bên phải là NULL. Bẫy hay gặp: COUNT(col) bỏ qua NULL (dùng COUNT(*) nếu muốn đếm cả dòng); lọc bảng phải trong WHERE sẽ vô hiệu hoá LEFT JOIN (phải đặt điều kiện trong ON). Nhớ WHERE lọc trước khi group, HAVING lọc sau aggregate.

Q6. Python/pandas: doanh thu trung bình theo nhóm & lọc.

import pandas as pd

# Doanh thu TB mỗi category, chỉ giữ category có > 100 đơn
g = (df.groupby("category")
       .agg(avg_rev=("revenue", "mean"),
            n_orders=("order_id", "count"))
       .reset_index())
g = g[g["n_orders"] > 100].sort_values("avg_rev", ascending=False)

# Đếm trùng & khử trùng lặp giữ bản ghi mới nhất
df = (df.sort_values("created_at")
        .drop_duplicates(subset="email", keep="last"))

# Fizzbuzz kiểu phỏng vấn nhanh
for i in range(1, 16):
    print("FizzBuzz" if i%15==0 else
          "Fizz" if i%3==0 else
          "Buzz" if i%5==0 else i)
Mẹo SQL: hầu hết câu "top-N per group", "second highest", "dedupe", "running total", "month-over-month" đều giải bằng window function (ROW_NUMBER/RANK/LAG/SUM OVER). Thành thạo window function là bạn qua được phần lớn vòng SQL.
4. Case study nghiệp vụ
Khung trả lời có cấu trúc

Câu case study kiểm tra tư duy sản phẩm & hệ thống chứ không phải một đáp án đúng duy nhất. Luôn nghĩ thành tiếng theo khung dưới đây, và hỏi lại trước khi lao vào giải:

Ví dụ 1 — Dự đoán khách hàng rời bỏ (Churn):

Clarify: churn = không hoạt động 30 ngày hay huỷ gói? Metric: recall cao để không bỏ sót khách sắp rời, nhưng cân với ngân sách chăm sóc ⇒ tối ưu theo lợi nhuận giữ chân. Data: hành vi sử dụng, tần suất, tickets hỗ trợ, thanh toán; nhãn từ lịch sử. Model: baseline logistic → gradient boosting; feature xu hướng giảm sử dụng. Validate: tách theo thời gian, sau đó thử nghiệm chiến dịch giữ chân trên nhóm nguy cơ cao vs nhóm đối chứng. Deploy: batch scoring hằng tuần, đẩy danh sách nguy cơ cao cho team CSKH. Monitor: theo dõi tỉ lệ churn thực tế của nhóm được can thiệp.

Ví dụ 2 — Phát hiện gian lận giao dịch (Fraud):

Clarify: chặn tức thời hay gắn cờ để review? Metric: cực mất cân bằng ⇒ PR-AUC, và cân recall (bắt gian lận) với precision (tránh phiền khách thật); tính chi phí mỗi loại lỗi. Data: đặc trưng giao dịch, hành vi lịch sử, thiết bị/vị trí; nhãn trễ (chargeback đến sau). Model: gradient boosting + rule engine; anomaly detection cho mẫu mới. Validate: đánh giá theo thời gian, chú ý feedback loop. Deploy: real-time API độ trễ mili-giây trong luồng thanh toán. Monitor: concept drift mạnh vì kẻ gian đổi chiêu ⇒ retrain thường xuyên, theo dõi tỉ lệ chặn nhầm.

Ví dụ 3 — Hệ gợi ý (Recommendation):

Clarify: tối ưu click, thời gian xem hay doanh thu? Metric: offline dùng Precision@K/NDCG, online dùng CTR/engagement qua A/B test. Data: tương tác user-item ngầm (view/click/mua), thuộc tính item; lưu ý cold-start. Model: baseline popularity → collaborative filtering/matrix factorization → mô hình lai (two-tower) kèm content. Validate: chia theo thời gian, chú ý bias phản hồi. Deploy: tính candidate offline + rerank online. Monitor: đa dạng & filter bubble, novelty, drift theo mùa.

Điểm cộng lớn: luôn đề xuất một baseline ngu ngốc (popularity, luật đơn giản) trước, và nói rõ bạn sẽ đo cải thiện so với baseline đó bằng A/B test — cho thấy tư duy thực dụng, hướng tác động.
5. Behavioral
Dùng khung STAR

Câu hành vi đánh giá cách bạn làm việc, xử lý xung đột & thất bại. Trả lời theo STAR: Situation (bối cảnh) → Task (nhiệm vụ/mục tiêu) → Action (bạn đã làm gì, cụ thể) → Result (kết quả, có số liệu). Tập trung vào "tôi" đã làm gì, kết thúc bằng bài học.

Câu hỏiGợi ý trả lời
Kể về một dự án bạn tự hào nhất.Chọn dự án có tác động đo được; nêu rõ vai trò cá nhân, thách thức kỹ thuật, và impact bằng con số (giảm X%, tăng Y).
Một lần phân tích của bạn sai/thất bại?Thành thật về lỗi, nhấn mạnh cách bạn phát hiện, khắc phục và bài học rút ra để không lặp lại. Thể hiện sự trưởng thành.
Khi bất đồng với stakeholder/PM về kết quả?Lắng nghe, dùng dữ liệu làm trọng tài, tìm giải pháp dung hoà; cho thấy giao tiếp & tôn trọng góc nhìn nghiệp vụ.
Giải thích khái niệm kỹ thuật cho người không chuyên?Kể ví dụ dùng phép loại suy, bỏ jargon, tập trung vào "vậy thì sao" đối với quyết định kinh doanh.
Ưu tiên nhiều việc gấp cùng lúc thế nào?Nêu cách bạn đánh giá impact vs effort, trao đổi với quản lý về kỳ vọng, và ví dụ cụ thể.
Chuẩn bị trước: viết sẵn 5–6 câu chuyện STAR bao trùm các chủ đề (impact, thất bại, xung đột, lãnh đạo, học nhanh). Mỗi câu chuyện có thể tái sử dụng cho nhiều câu hỏi khác nhau.
6. Checklist ôn tập 1 tuần
Lịch ôn nước rút trước phỏng vấn
Kế hoạch 7 ngày: mỗi ngày 2–3 giờ tập trung, kết thúc bằng nói to đáp án như đang phỏng vấn thật. Ưu tiên hiểu bản chất hơn số lượng câu.
NgàyTrọng tâm
Ngày 1Thống kê & Xác suất: p-value, CLT, Type I/II, CI, Bayes. Làm lại 10 câu, tự giải thích "nó KHÔNG phải là...".
Ngày 2ML nền tảng: bias-variance, overfitting, regularization, metric (precision/recall/ROC-AUC). Vẽ tay ma trận nhầm lẫn.
Ngày 3ML thuật toán: cây, RF vs boosting, imbalanced, curse of dimensionality, cross-validation. Ôn ưu/nhược từng model.
Ngày 4SQL & coding: luyện 15–20 câu (window function, join, aggregate) trên LeetCode/StrataScratch + vài bài pandas.
Ngày 5Case study: chạy khung clarify→monitor trên 3–4 bài (churn, fraud, recommendation, pricing) — nói to.
Ngày 6Behavioral (viết 5–6 câu chuyện STAR) + ôn dự án cá nhân trong CV, chuẩn bị câu hỏi ngược cho nhà tuyển dụng.
Ngày 7Mock interview toàn diện với bạn/gương, rà lại điểm yếu, nghỉ ngơi sớm. Chuẩn bị logistics (thiết bị, IDE, môi trường).
Ngày phỏng vấn: nói rõ giả định, nghĩ thành tiếng, hỏi lại khi chưa rõ, không im lặng quá lâu, và nếu không biết thì trình bày cách bạn sẽ tìm ra đáp án — thái độ giải quyết vấn đề quan trọng hơn đáp án hoàn hảo.
← Quay lại
Bài 11: MLOps