📖 Hướng dẫn thực hành · Từ data thô đến kết quả

DataMine AI —
Từng bước từ data thô đến insight

Hướng dẫn thực tế, theo đúng luồng làm việc trong app — từ khi bạn có file Excel/CSV thô đến khi xuất báo cáo hoàn chỉnh. Không cần biết lập trình.

🌐 Streamlit · Python 🤖 Gemini AI 📊 Tương thích Solver Analytics 10+ Thuật toán ML Xuất Excel định dạng Solver
🚀

Luồng tổng quan — Tôi có data thô, làm gì?

5 phút đọc để biết toàn bộ quy trình trước khi bắt tay vào làm

Truy cập app: Mở https://cengagechapter10-nurarv2yv8uwffhazzezdz.streamlit.app/ — không cần cài đặt gì. Trên điện thoại cũng dùng được.
📂
Bước 1
Upload file
Kéo thả file Excel/CSV vào sidebar. App tự đọc header và preview ngay.
🧹
Bước 2
Làm sạch
Fill missing, remove duplicates, encode text, bin số, lọc dòng. 13+ công cụ.
🔬
Bước 3
EDA
Xem phân phối, correlation, missing values. Hiểu data trước khi chạy model.
🤖
Bước 4
Chọn & chạy model
AI gợi ý thuật toán. Chọn target, chọn features, cấu hình, nhấn Run.
📊
Bước 5–6
Kết quả & Xuất
Đọc Confusion Matrix, ROC, Lift. Xuất Excel định dạng Solver Analytics.
⚠️
Trước khi bắt đầu: Nhập Gemini API Key vào ô trên cùng sidebar. Lấy key miễn phí tại aistudio.google.com → Get API Key. Không có key vẫn dùng được nhưng không có AI Chat và AI Blueprint.

🗺️

Giao diện app — Ở đâu làm gì

Cần biết để không bị lạc khi dùng

◀️

Sidebar (cột trái)

Nơi nhập API Key, upload file, chọn sheet, chọn file đang phân tích. Theo dõi tiến độ 4 bước workflow ở đây.

📑

Tab điều hướng (đầu trang)

Sau khi upload file, trang chính chia thành các tab: 💬 AI Chat luôn ở đầu tiên. Tiếp theo là Prep Data, EDA, Run ML Models, Results.

📊

Vùng nội dung chính

Hiển thị preview data, công cụ xử lý, biểu đồ EDA, cấu hình model, kết quả metrics — tuỳ theo tab đang chọn.

📝

Change Log

Mỗi bước Prep Data được ghi lại ở Change Log. Có nút ↩️ Undo để hoàn tác bước cuối nếu làm nhầm.

💡
Chưa có data để test? App có sẵn dataset mẫu Bank Loan (5000 khách hàng, mục tiêu predict ai sẽ mua Personal Loan). Rất phù hợp để làm quen với toàn bộ luồng.
📂

Bước 1 — Upload & Đọc dữ liệu

Mục tiêu: Đưa data vào app và kiểm tra app đọc đúng chưa

🎯 Các bước thực hiện

1
Sidebar Kéo thả file vào ô "Drop files here", hoặc click để chọn file. Hỗ trợ: .xlsx .xlsm .xls .csv .json — tối đa 30MB.
2
Sidebar Nếu file Excel có nhiều sheet, dropdown "Chọn sheet" sẽ hiện ra. Chọn sheet chứa data chính (thường là sheet tên "Data").
3
Sidebar Nếu file có logo/tiêu đề ở đầu và header thực sự không phải dòng 1, tăng số "Dòng header" rồi nhấn "Cập nhật header".
4
Vùng chính Kiểm tra preview bảng dữ liệu — xem tên cột có đúng không, có bị đọc nhầm cột nào không. Xem thống kê nhanh: số dòng, số cột, % missing, kiểu dữ liệu.
5
(Tùy chọn) Nếu cần ghép nhiều file: upload nhiều file cùng lúc, sau đó vào expander "Merge Files" trong sidebar để join theo cột chung.

✅ Dấu hiệu upload thành công

Bảng preview hiện ra đúng với tên cột bạn mong đợi. Sidebar chuyển sang bước 2 trong workflow indicator. Stat bar ở đầu trang hiển thị số dòng, cột, % null.

❌ Nếu cột bị sai / đọc nhầm

Thử tăng "Dòng header" nếu có hàng thừa ở đầu. Nếu CSV bị encoding lỗi (tiếng Việt vỡ), lưu lại file CSV với encoding UTF-8 trước khi upload.

💡
Upload nhiều file: Có thể upload nhiều file cùng lúc. Dropdown trong sidebar cho phép chuyển đổi file đang phân tích. Mỗi file có vùng Prep Data riêng biệt, không ảnh hưởng nhau.
🧹

Bước 2 — Làm sạch & Chuẩn bị dữ liệu

Mục tiêu: Biến data thô thành data sạch mà model có thể hiểu được

⚠️
Thứ tự khuyến nghị: Fill Missing → Remove Duplicates → Xử lý Outlier → Encode (text → số) → Binning → Filter/Partition → Cắt dữ liệu nếu cần. Đừng Encode trước khi Fill Missing — sẽ tạo ra giá trị số cho ô null.

📍 Vị trí trong app

Tab chính Chọn tab "🧹 Prep Data" sau khi upload file. Các công cụ xếp theo nhóm, dùng expander để mở từng nhóm.
Sau mỗi thao tác, xem Change Log ở cuối trang để biết đã làm gì. Nhấn ↩️ Undo nếu muốn hoàn tác bước cuối.

📋

13 Công cụ Prep Data

Dùng theo đúng thứ tự, áp dụng từng bước một

Công cụLàm gìKhi nào dùngLưu ý thực tế
Fill Missing Điền giá trị bị thiếu: số → mean, text → mode (giá trị phổ biến nhất) Khi có cột nào đó có % null > 0 (xem ở stat bar) Làm trước tiên trước mọi bước khác
Remove Duplicates Xóa dòng bị trùng lặp hoàn toàn, giữ lại dòng đầu Khi duplicate count > 0 App báo số dòng xóa trước khi confirm
Cap Outlier Kẹp giá trị bất thường lại tại ngưỡng 3×IQR, giữ nguyên dòng Có outlier nhưng dòng đó vẫn hợp lệ (không phải lỗi nhập) Dòng không bị xóa, chỉ giá trị thay đổi
Clean Outlier Xóa hẳn dòng có outlier cực đoan Outlier là lỗi nhập liệu thực sự (vd: tuổi = 999) Dùng sau khi đã xem EDA để biết outlier ở đâu
Encode Ordinal Mã hóa text → số có thứ tự: Low=1, Medium=2, High=3 Biến text có thứ tự tự nhiên (vd: Low/Medium/High, S/M/L/XL) Có thể tùy chỉnh thứ tự trong expander
Encode Nominal One-Hot: tạo cột 0/1 riêng cho mỗi giá trị Biến text không có thứ tự (vd: màu sắc, loại sản phẩm, tỉnh thành) N giá trị → N cột mới, dataset sẽ rộng hơn
Binning Chia cột số liên tục thành N khoảng bằng nhau theo số lượng (Equal Count), đánh số 1, 2, ..., N Trước khi chạy Naive Bayes. Biến liên tục cần rời rạc hóa Giống hệt Solver Analytics — dùng khi muốn kết quả so sánh được
Grouping Gộp nhiều giá trị text thành ít nhóm hơn theo mapping tự định nghĩa Khi có quá nhiều category (vd: 50 tỉnh → 3 miền) Tự nhập mapping: HN → Miền Bắc, TP.HCM → Miền Nam
Filter Lọc chỉ giữ lại các giá trị chọn của một cột cụ thể Muốn phân tích một subset (vd: chỉ khách hàng ở HN) Hiển thị số dòng còn lại trước khi apply
Partition Giữ toàn bộ class thiểu số (vd: Loan=1) + lấy N dòng sample từ class đa số (vd: Loan=0) Khi dataset mất cân bằng nặng (imbalanced): vd: 10% class 1, 90% class 0 Vd: all 480 Loan=1 + random 256 Loan=0 → dataset cân bằng hơn
head(n) Giữ n dòng đầu tiên của dataset Dataset quá lớn, muốn thử nhanh với một phần nhỏ Deterministic, luôn lấy đúng n dòng đầu
sample(n) Lấy ngẫu nhiên n dòng (seed=42, reproducible) Lấy mẫu đại diện từ dataset lớn seed=42 đảm bảo kết quả giống nhau mỗi lần
Ceiling Làm tròn lên số nguyên gần nhất (2.1 → 3; 3.0 → 3) Biến số thập phân không cần thiết sau khi tính toán Thường dùng sau khi tạo derived feature
Sau mỗi bước: Xem Change Log để biết bao nhiêu dòng/cột bị ảnh hưởng. Nhấn "⬇ Download Before/After Excel" để lưu bản so sánh trước/sau — hữu ích khi cần báo cáo quy trình làm sạch.
🔬

Bước 3 — Khám phá dữ liệu (EDA)

Mục tiêu: Hiểu data trước khi chọn model — đừng bỏ qua bước này

📍 Vị trí trong app

Tab chính Chọn tab "🔬 EDA & Validation". Có 4 sub-tab: Overview, Distributions, Correlations, Missing & Outliers.
📋

Overview — Nhìn tổng quan

Số dòng, cột, kiểu dữ liệu từng cột, % null, top values. Xem trước khi làm bất cứ điều gì.

📊

Distributions — Phân phối

Histogram và boxplot cho từng cột số. Phát hiện skewed data, outlier, phân phối có chuẩn không.

🔗

Correlations — Tương quan

Heatmap correlation giữa các cột số. Tìm feature nào tương quan cao với target, feature nào redundant.

⚠️

Missing & Outliers

Bar chart tỷ lệ null từng cột. Boxplot phát hiện outlier trước khi quyết định Cap hay Clean.

💡
Quyết định từ EDA: Xem Distributions để biết có cần Binning không (biến liên tục với phân phối lệch). Xem Correlations để loại bỏ feature thừa. Xem Missing để biết cột nào cần Fill Missing.
🤖
AI Advisor trong "🎯 Algorithm Advisor": Sau EDA, vào tab Run ML Models → sub-tab Algorithm Advisor. AI phân tích đặc điểm data (số lượng, tỷ lệ class, kiểu biến) rồi đề xuất thuật toán phù hợp nhất. Không cần tự quyết định.
🤖

Bước 4 — Chọn và chạy mô hình ML

Mục tiêu: Cấu hình đúng rồi nhấn Run — app làm phần còn lại

🎯 Quy trình cấu hình model

1
Tab Run ML Models Chọn Target column — cột bạn muốn dự đoán (vd: "Personal Loan", "Churn", "Default").
2
Chọn Feature columns — các cột dùng để predict. Mặc định chọn tất cả trừ target. Bỏ chọn cột không liên quan (vd: ID, tên khách hàng).
3
Chọn Validation % — tỷ lệ data dành để test model (mặc định 40%, tương thích Solver Analytics).
4
Chọn Thuật toán — xem mục "Tất cả thuật toán ML" để biết chọn cái nào. Hoặc dùng Algorithm Advisor để AI chọn giúp.
5
(Tùy chọn) Mở "⚙️ Hyperparameter Settings" → chọn Default (Solver style) để kết quả giống Solver Analytics, hoặc Custom để tự chỉnh.
6
Nhấn "▶ Run Model". App tự chia train/validation, train model, tính toán tất cả metrics.
⚠️
Naive Bayes cần Binning trước: Nếu chạy Naive Bayes mà features còn là số liên tục (float), app sẽ tự dùng GaussianNB. Để giống Solver Analytics, hãy Binning các cột số ở Bước 2 trước khi chạy — app sẽ tự chuyển sang CategoricalNB với alpha=1.
💡
Chạy nhiều model để so sánh: Có thể chạy nhiều thuật toán khác nhau. Mỗi lần chạy kết quả được lưu lại. Cuối cùng xem Comparison Table trong Export để thấy tất cả model side by side.
📊

Bước 5 — Đọc và hiểu kết quả

Mục tiêu: Biết model tốt hay không và tại sao

🔲

Confusion Matrix

Đọc từng ô để biết model sai ở đâu

Predict 0
Predict 1
Thực tế 0
TN
Đúng: predict 0, thật 0
FP
Sai: predict 1, thật 0
Thực tế 1
FN
Sai: predict 0, thật 1
TP
Đúng: predict 1, thật 1
MetricCông thứcÝ nghĩa thực tế
Accuracy(TN+TP) / TotalTổng % dự đoán đúng
SensitivityTP / (TP+FN)Bắt được bao nhiêu % class 1 thực sự (quan trọng với fraud, loan)
SpecificityTN / (TN+FP)Tránh báo nhầm bao nhiêu % class 0
PrecisionTP / (TP+FP)Khi predict là 1, đúng bao nhiêu %
AUCArea under ROCKhả năng phân biệt tổng quát — xem bên dưới
⚠️
Accuracy cao không có nghĩa là model tốt: Nếu dataset có 95% class 0, model predict toàn bộ là 0 sẽ đạt Accuracy=95% nhưng Sensitivity=0%. Hãy xem Sensitivity và AUC để đánh giá thực chất.

📈

ROC Curve & AUC

Đánh giá tổng thể khả năng phân biệt của model

AUC ≥ 0.90

Xuất sắc — Model phân biệt tốt class 0 vs 1. Có thể dùng để triển khai thực tế.

AUC 0.70–0.90

Tốt — Dùng được. Thử tune hyperparameters hoặc thêm feature để cải thiện.

AUC < 0.70

Yếu — Kiểm tra lại data quality, thêm feature có ý nghĩa, hoặc thử model khác.


📉

Decile Lift Table

Ứng dụng thực tế nhất: biết nên target ai trước

App sắp xếp toàn bộ validation set theo xác suất dự đoán giảm dần, chia thành 10 nhóm bằng nhau (mỗi nhóm = 10% data). Lift = tỷ lệ class 1 trong nhóm đó ÷ tỷ lệ class 1 trung bình toàn bộ.

Decile 1
6.0×
Decile 2
2.5×
Decile 3
0.8×
Decile 4–10
≈0.1×
💡
Đọc thực tế: Decile 1 lift = 6× có nghĩa là: nếu chỉ contact 10% khách hàng có xác suất cao nhất, tỷ lệ thành công cao gấp 6 lần so với contact ngẫu nhiên. Dùng để tối ưu chi phí marketing, credit scoring, fraud detection.
📥

Bước 6 — Xuất báo cáo Excel

File Excel xuất ra có cùng cấu trúc với Solver Analytics/XLMiner

📍 Cách xuất file

Tab Results Sau khi chạy model xong, vào sub-tab "⬇️ Export". Nhấn "⬇ Download Excel Report" để tải về.
File Excel có đầy đủ các sheet — xem cấu trúc bên dưới. Có thể mở thẳng trong Solver Analytics để so sánh kết quả.
Raw Data
Cleaned Data
_TrainScore
_ValScore
_LiftChart
_ValDetails
Comparison
Raw Data — Dữ liệu gốc khi upload (trước khi Prep)
Age
Income
Loan
25
49
0
45
34
1

Dùng để so sánh before/after — không bị thay đổi

Sheet _TrainScore_ValScore khớp format với NB_TrainingScoreNB_ValidationScore của Solver Analytics. Mở cùng lúc cả hai file để so sánh trực tiếp số liệu.
⚙️

Tất cả thuật toán ML

Chọn cái nào, khi nào dùng, default params tương thích Solver

ℹ️
Mở "⚙️ Hyperparameter Settings" trong tab Run ML Models → chọn "Default (Solver style)" để dùng đúng params như Solver Analytics. Chọn "Custom" để tự điều chỉnh.
Classification
Naive Bayes
Solver default: CategoricalNB, alpha=1, Prior=Empirical
alpha=1.0 (Laplace)prior=empiricalAuto: CategoricalNB nếu data đã bin

App tự động detect: nếu features là integer (đã qua Binning) → dùng CategoricalNB giống Solver. Nếu features là số thực → dùng GaussianNB. Đây là thuật toán được tối ưu nhất để cho kết quả giống Solver.

→ Dùng khi: muốn kết quả so sánh được với Solver Analytics, dataset vừa, đã qua Binning.

Classification
Linear Discriminant Analysis (LDA)
Solver default: solver=svd, no shrinkage
solver="svd"shrinkage=None

Tìm ranh giới tuyến tính tối ưu giữa các lớp. Hiệu quả khi data gần phân phối chuẩn, ít features hơn samples. Không cần scale trước.

→ Dùng khi: features numeric, dataset không quá lớn, muốn model interpretable.

Classification
K-Nearest Neighbors (KNN)
Solver default: k=3, uniform, minkowski
n_neighbors=3weights="uniform"metric="minkowski"

Classify dựa trên k láng giềng gần nhất. k=3 (Solver default). k nhỏ → overfit; k lớn → underfit. Cần scale data trước nếu features có đơn vị khác nhau.

→ Dùng khi: muốn baseline nhanh, dataset không quá lớn (<10k dòng).

Classification
Classification Trees
Solver default: max_depth=5, gini, class_weight=balanced
max_depth=5criterion="gini"class_weight="balanced"

Cây quyết định IF-THEN dễ giải thích. Sau khi chạy, xem Decision Tree Rules trong expander để đọc luật dưới dạng ngôn ngữ tự nhiên. max_depth=5 tránh overfit.

→ Dùng khi: cần giải thích model cho người không chuyên, cần business rules cụ thể.

Classification
Support Vector Machine (SVM)
Solver default: kernel=rbf, C=1, gamma=scale
kernel="rbf"C=1.0gamma="scale"

Tìm hyperplane tối ưu. C lớn = fit sát data; C nhỏ = generalize tốt hơn. rbf kernel cho non-linear boundaries. Chậm hơn với dataset lớn.

→ Dùng khi: dataset nhỏ-vừa, features đã được scale, cần độ chính xác cao.

Classification
Random Forest
n_estimators=100, class_weight=balanced
n_estimators=100class_weight="balanced"

Ensemble 100 cây quyết định — robust, ít overfit, tự xử lý missing value tốt. Cung cấp Feature Importance ranking để biết cột nào quan trọng nhất.

→ Dùng khi: muốn accuracy cao nhất, cần Feature Importance, dataset có noise.

Classification
Logistic Regression
C=1, penalty=l2, class_weight=balanced
C=1.0penalty="l2"class_weight="balanced"

Baseline interpretable nhất. Coefficient của từng feature nói lên tác động trực tiếp. C=regularization (nhỏ → regularize mạnh hơn). Nhanh và ổn định.

→ Dùng khi: muốn hiểu tác động của từng biến, baseline đơn giản, cần deploy nhanh.

Regression
Linear Regression
Dự đoán giá trị số liên tục
fit_intercept=True

Dùng khi target là số liên tục (vd: giá nhà, doanh thu). Metrics: R² (≥0.8 tốt; <0.4 yếu) và RMSE (sai số trung bình). Khác với Classification — không có Confusion Matrix.

→ Dùng khi: target là số liên tục, không phải 0/1 hay loại.

Clustering
K-Means Clustering
Không có target — tự tìm nhóm
n_init=10init="k-means++"Tự chọn K

Phân nhóm tự động, không cần nhãn. Dùng Elbow Chart để chọn K tối ưu (K tại điểm "gãy" của đường inertia). Silhouette Score ≥ 0.5 = tốt. Data được StandardScaler trước khi cluster.

→ Dùng khi: muốn phân khúc khách hàng, tìm nhóm tự nhiên trong data mà không có nhãn.

Association
Association Rules (Apriori)
Tìm luật IF-THEN trong transactional data
min_support=0.05min_confidence=0.3min_lift=1.0

Tìm luật: "Nếu mua A thì hay mua B". Support = tần suất A∩B. Confidence = P(B|A). Lift > 1 = A và B có liên quan dương tính. Phù hợp cho market basket analysis.

→ Dùng khi: data là giao dịch (purchase, click), muốn tìm patterns kiểu "sản phẩm nào hay đi cùng nhau".

⚖️

So sánh với Solver Analytics / XLMiner

Giống nhau ở đâu, khác nhau ở đâu, và khi nào nên dùng cái nào

🧬

DataMine AI

Web app miễn phí, không cần cài. Chạy trên browser. Hỗ trợ AI Chat, AI Blueprint, tự động suggest thuật toán. Export ra Excel dạng Solver.

✅ Miễn phí, mọi thiết bị, AI-powered, 10+ models

📊

Solver Analytics / XLMiner

Add-in Excel. Chạy trong Excel. Giao diện quen thuộc. Chuẩn hóa giảng dạy ở nhiều trường đại học. Cần license.

📌 Cần Excel license, desktop only, chuẩn học thuật

Tính năngSolver AnalyticsDataMine AITrạng thái
Binning Equal Count, giá trị = Rank 1..N pd.qcut Equal Count, rank 1..N ✅ Khớp hoàn toàn
Naive Bayes CategoricalNB, Laplace alpha=1, Prior=Empirical Auto-detect CategoricalNB/GaussianNB, alpha=1 ✅ Khớp hoàn toàn
KNN k=3 mặc định k=3 mặc định (thay được) ✅ Khớp hoàn toàn
Metrics Accuracy, Sensitivity, Specificity, Precision, F1, AUC Giống hệt, cùng công thức tính ✅ Khớp hoàn toàn
Decile Lift 10 rows: Decile, Mean, Std.Dev, Min, Max, ID, Lift Giống hệt cấu trúc ✅ Khớp hoàn toàn
PostProb PostProb:0, PostProb:1 cho từng record Giống hệt (100 dòng đầu) ✅ Khớp hoàn toàn
Sheet format NB_TrainingScore, NB_ValidationScore, NB_ValidationLiftChart Model_TrainScore, Model_ValScore, Model_LiftChart 🔵 Khớp format
Decision Trees max_depth=5, gini max_depth=5, gini + class_weight=balanced 🔵 Gần giống
Validation split 40% validation mặc định 40% mặc định (thay được) ✅ Khớp hoàn toàn
Partition/Oversample 50% success class trong training Partition tool + Oversample option 🔵 Tương đương
Logistic Regression Ridge/Lasso với Cross-Validation L2, C=1 cố định (không có CV) ⚠️ Khác — không có CV
AI Chat Không có Có — Gemini AI giải thích kết quả 🔵 DataMine AI có thêm
Random Forest, SVM Có (XLMiner) 🔵 Tương đương
Platform Excel Add-in, Windows only Web browser, mọi thiết bị 🔵 Khác nhau — đều dùng được
Để kết quả gần Solver nhất:
  1. Bin các biến liên tục với 20 khoảng trước khi chạy Naive Bayes
  2. Chọn Validation = 40% (Solver Analytics default)
  3. Dùng Partition: đảm bảo ~50% class 1 trong training set (giống oversampling của Solver)
  4. Trong Hyperparameter Settings, chọn "Default (Solver style)"
  5. Chạy Naive Bayes — app tự dùng CategoricalNB với alpha=1
💡
Khi nào dùng DataMine AI thay Solver: Khi không có Excel/Solver license, khi dùng máy Mac hoặc trên điện thoại, khi cần AI giải thích kết quả, khi cần thử nhiều model nhanh để so sánh, hoặc khi dataset quá lớn với Excel.
💬

AI Chat

Hỏi AI về data của bạn, kết quả model, hoặc kiến thức data science

📍

Vị trí trong app

Tab "💬 AI Chat" ở đầu tiên trong navigation bar — luôn sẵn sàng, không cần upload data trước.

🧠

Context-aware

AI tự biết bạn đang làm gì: file nào đang mở, bao nhiêu dòng, kết quả model nào đã chạy, AUC là bao nhiêu.

🔑

API Key

Cần Gemini API Key miễn phí từ aistudio.google.com → Get API Key. Nhập vào ô đầu tiên trong sidebar. Giới hạn 15 request/phút với Flash model.

💡

Hỏi gì hiệu quả?

Thay vì "Kết quả model tốt không?", hỏi: "Dựa vào Naive Bayes AUC=0.92 và Lift Decile 1=6×, model này có phù hợp để phân khúc khách hàng marketing không?"

🤖
AI Blueprint (trong tab Results → Export): AI tự động viết bản phân tích đầy đủ — mô tả data, quy trình, kết quả, khuyến nghị — sẵn sàng paste vào báo cáo. Không cần viết từ đầu.