Ngân hàng đề — Microsoft Azure Data Scientist

Tìm thấy 313 câu.

Câu 151
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.

After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.

You create an Azure Machine Learning pipeline named pipeline1 with two steps that contain Python scripts. Data processed by the first step is passed to the second step.

You must update the content of the downstream data source of pipeline1 and run the pipeline again.

You need to ensure the new run of pipeline1 fully processes the updated content.

Solution: Set the regenerate_outputs parameter of the pipeline1 experiment’s run submit method to True.

Does the solution meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧠 Phân tích câu hỏi trắc nghiệm Azure Machine Learning Pipelines

Xin chào! Tôi là Microsoft Azure Data Scientist chuyên sâu về Azure Machine Learning (Azure ML).
Hôm nay, tôi sẽ phân tích kỹ câu hỏi trắc nghiệm này theo yêu cầu của bạn. Câu hỏi thuộc dạng case study (phần câu hỏi liên tiếp với tình huống giống nhau, mỗi câu có giải pháp riêng), thường xuất hiện trong kỳ thi chứng chỉ như DP-100: Designing and Implementing a Data Science Solution on Azure (phiên bản cập nhật đến năm 2026, dựa trên Azure ML SDK v2 và CLI v2 mới nhất). Chủ đề tập trung vào Azure ML Pipelines, không phải AWS như đề cập (có thể là nhầm lẫn nhỏ).

🧩 Giải thích nội dung câu hỏi chi tiết:
Câu hỏi mô tả tình huống: Bạn đã tạo một pipeline Azure ML tên pipeline1 với hai steps (bước) sử dụng script Python. Output (dữ liệu đầu ra) của step 1 được truyền trực tiếp làm input cho step 2 (dạng data flow tuyến tính).

  • Vấn đề cần giải quyết: Bạn cập nhật nội dung (content) của downstream data source (nguồn dữ liệu hạ lưu) của pipeline1, sau đó chạy lại pipeline. "Downstream data source" ở đây ám chỉ nguồn dữ liệu được sử dụng bởi các step sau (cụ thể là input của step 2, thường là output cached từ step 1 hoặc datastore liên kết).
  • Mục tiêu (goal): Đảm bảo run mới của pipeline fully processes (xử lý đầy đủ) nội dung đã cập nhật, tránh tình trạng caching (lưu cache) outputs cũ dẫn đến step không re-execute.
  • Giải pháp đề xuất (solution): Khi submit run mới qua experiment của pipeline1, set tham số regenerate_outputs=True trong method submit().
  • Câu hỏi: Giải pháp này có đạt mục tiêu không? (Yes/No).
    Lưu ý quan trọng: Azure ML Pipelines mặc định sử dụng caching mechanism dựa trên hash của inputs/outputs để tối ưu thời gian chạy (tính đến Azure ML 2026, hỗ trợ cả Pipeline v1 và v2 với MLflow integration). Nếu nội dung data source thay đổi nhưng reference (đường dẫn) giống nhau, cache có thể không trigger re-run, dẫn đến không fully process.

✅ Đáp án đúng: Yes
Lý do lựa chọn: Giải pháp hoàn toàn đạt mục tiêu vì regenerate_outputs=True force (buộc) tất cả các steps trong pipeline re-execute và regenerate outputs mới, bất kể inputs có thay đổi hash hay không. Điều này đảm bảo pipeline fully processes nội dung updated của downstream data source (step 2 sẽ nhận data mới từ step 1 re-run). Đây là cách chính thức để bypass cache trong Azure ML (xác nhận từ docs 2026).

🛠️ Giải thích tất cả các phương án (giữ nguyên văn bản gốc bằng tiếng Anh):

  • Yes: ✅ Đúng. Phương án này đạt mục tiêu vì tham số regenerate_outputs=True trong method Experiment.submit() (Azure ML SDK/Core) sẽ tắt cache tạm thời cho toàn pipeline, buộc step 1 re-process data và truyền output mới cho step 2. Kết quả: Pipeline fully processes updated content của downstream data source (ví dụ: nếu data trong datastore/blob được update thủ công). Không dùng tham số này (mặc định False) sẽ dẫn đến cache cũ nếu inputs reference không đổi.
  • No: ❌ Sai. Nếu chọn No, bạn bỏ lỡ giải pháp chuẩn – Azure ML không tự detect content change nếu chỉ update file trong datastore mà không versioning Dataset. Giải pháp khác (như tạo Dataset mới hoặc thay đổi pipeline args) có thể work nhưng không phải solution này.

📘 Tài liệu tham khảo (cập nhật mới nhất 2026):

Hy vọng phân tích này giúp bạn nắm vững! Nếu cần code sample hoặc case study đầy đủ, hãy hỏi thêm nhé 🚀.

Câu 152
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You are a data scientist using Azure Machine Learning Studio.
You need to normalize values to produce an output column into bins to predict a target column.
Solution: Apply a Quantiles binning mode with a PQuantile normalization.
Does the solution meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi thuộc dạng bài thi Microsoft Azure (cụ thể là chứng chỉ DP-100: Designing and Implementing a Data Science Solution on Azure), nằm trong chuỗi câu hỏi (series) mô tả một tình huống giống nhau. Mỗi câu đưa ra một giải pháp khác nhau để giải quyết mục tiêu chung.
Tình huống: Bạn là một data scientist sử dụng Azure Machine Learning Studio (phiên bản classic). Nhiệm vụ là normalize (chuẩn hóa) các giá trị để tạo ra một cột output được phân chia thành các bins (nhóm rời rạc), nhằm sử dụng cột này như một feature để dự đoán cột target.
Giải pháp đề xuất: Sử dụng module Normalize Data với Quantiles binning mode (chế độ phân chia bins theo phân vị, đảm bảo mỗi bin có số lượng mẫu gần bằng nhau) kết hợp PQuantile normalization (chuẩn hóa theo phân vị, tức Percentile transformation).
Câu hỏi: Giải pháp này có đạt được mục tiêu không? (Yes/No).
📘 Lưu ý: Azure ML Studio classic đã bị ngừng hỗ trợ từ năm 2024, nhưng kiến thức vẫn dựa trên tài liệu chính thức mới nhất (cập nhật đến 2024-2026 qua Azure ML designer và Python SDK tương đương).

✅ Đáp án đúng: No

Lý do lựa chọn: ❌ Giải pháp KHÔNG đạt mục tiêu vì module Normalize Data với Quantiles binning mode (tương đương "Input bins") kết hợp PQuantile normalization (Percentile transformation) chủ yếu tạo ra cột output là giá trị liên tục chuẩn hóa theo phân vị (0-1), chứ không phải các bins rời rạc (discrete/categorical) phù hợp để làm feature dự đoán target. Để tạo bins rời rạc thực sự, cần dùng module Group Data into Bins với Quantile binning mode.
🛠️ Quy trình sai ở đây: Binning được thực hiện trước (chia thành bins bằng số lượng), nhưng sau đó PQuantile áp dụng transformation percentile lên dữ liệu đã bin, biến bin index thành giá trị percentile liên tục (uniform distribution), không giữ tính discrete cần thiết cho modeling (như decision tree hoặc classification).

📋 Giải thích tất cả các phương án

  • Yes ❌ SAI: Phương án này cho rằng giải pháp đạt mục tiêu, nhưng thực tế KHÔNG, vì PQuantile normalization (Percentile method trong Normalize Data) chuyển đổi giá trị thành percentile rank liên tục (0-100 hoặc 0-1), ngay cả sau khi binning. Điều này không tạo ra output column vào discrete bins (ví dụ: bin 1,2,3...) để sử dụng hiệu quả trong model dự đoán target. Thay vào đó, nó giống như quantile transform liên tục, phù hợp scaling hơn là binning. Trong Azure ML Studio (phiên bản mới nhất trước khi deprecated), docs xác nhận transformation này output numerical continuous, không phải categorical bins.

  • No ✅ ĐÚNG: Phương án này chính xác vì giải pháp không phù hợp. Để đạt mục tiêu "produce an output column into bins to predict a target column", cần module Group Data into Bins (không phải Normalize Data), với Binning mode = Quantile (chia equal count, output discrete bin labels như "Bin1", "Bin2"...). Module Normalize Data ưu tiên scaling/normalization, và combo Quantiles + PQuantile dẫn đến output không discrete, làm giảm hiệu quả predict target (ví dụ: entropy cao hơn ở continuous vs discrete bins).

📚 Tài liệu tham khảo

  • 🛠️ Normalize Data module: Microsoft Docs - Normalize Data (xác nhận PQuantile = Percentile transformation → continuous percentile ranks).
  • 🛠️ Group Data into Bins module (giải pháp đúng): Microsoft Docs - Group Data into Bins (Quantile mode tạo discrete bins lý tưởng cho ML prediction).
  • 📘 DP-100 Exam Guide (cập nhật 2024): Tài liệu chính thức nhấn mạnh sử dụng Group Data into Bins cho binning features để predict target, không dùng Normalize Data cho mục đích này.
  • 🔄 Azure ML mới (2026): Trong Azure ML Studio (designer) hoặc Python, dùng QuantileTransformer (sklearn) cho continuous, hoặc KBinsDiscretizer với strategy='quantile' cho discrete bins tương đương.

Hy vọng phân tích giúp bạn ôn thi hiệu quả! 🚀

Câu 153
You register a file dataset named csv_folder that references a folder. The folder includes multiple comma-separated values (CSV) files in an Azure storage blob container.
You plan to use the following code to run a script that loads data from the file dataset. You create and instantiate the following variables:

You have the following code:
from azureml.train.estimator import Estimator
file_dataset = ws.datasets.get('csv_folder')
estimator = Estimator(source_directory=script_folder,
                       estimator=estimator)

compute_target = remote_cluster,
entry_script = 'script.py')
run = experiment.submit(config=estimator)
run.wait_for_completion(show_output=True)

You need to pass the dataset to ensure that the script can read the files it references.
Which code segment should you insert to replace the code comment?
  1. A inputs=[file_dataset.as_named_input('training_files')],
  2. B inputs=[file_dataset.as_named_input('training_files').as_mount()],
  3. C inputs=[file_dataset.as_named_input('training_files').to_pandas_dataframe()],
  4. D script_params={'--training_files': file_dataset},
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi thuộc lĩnh vực Azure Machine Learning (Azure ML), tập trung vào việc sử dụng Estimator để huấn luyện mô hình trên compute cluster từ xa. Cụ thể:

  • Bạn đã đăng ký một file dataset tên csv_folder, tham chiếu đến một folder chứa nhiều file CSV nằm trong Azure Blob Storage container.
  • Mục tiêu: Chạy script script.py (nằm trong script_folder) trên remote compute cluster (remote_cluster) thuộc workspace (ws) để tải và xử lý dữ liệu từ dataset này.
  • Code hiện tại sử dụng Estimator từ azureml.train.estimator, nhưng thiếu phần truyền dataset vào để script có thể đọc files (qua inputs).
  • Hình ảnh đính kèm là bảng mô tả biến:
    • remote_cluster: Tham chiếu đến Azure Machine Learning compute cluster (cluster tính toán từ xa).
    • ws: Tham chiếu đến Azure Machine Learning workspace (không gian làm việc Azure ML).
  • Vấn đề cần giải quyết: Thay thế comment trong code Estimator bằng đoạn code phù hợp để truyền dataset, đảm bảo script trên remote cluster có thể truy cập folder CSV như một mount point (điểm gắn kết file hệ thống), vì dataset là folder đa file, không phải single file.

Code đầy đủ cần insert vào tham số inputs của Estimator, giúp dataset được mount vào container chạy script. Script sau đó có thể đọc files qua đường dẫn mount (ví dụ: ./inputs/training_files/).

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: inputs=[file_dataset.as_named_input('training_files').as_mount()]

Lý do 🛠️:

  • file_dataset.as_named_input('training_files'): Tạo named input với tên 'training_files', cho phép script truy cập qua args.training_files hoặc ./inputs/training_files.
  • .as_mount(): Mount dataset như volume vào remote compute cluster, biến folder CSV thành đường dẫn file hệ thống thực tế (không copy toàn bộ data). Điều này lý tưởng cho file dataset folder chứa nhiều CSV, vì script có thể đọc trực tiếp các file con (ví dụ: dùng pandas.read_csv lặp qua folder).
  • Phù hợp với Estimator trên remote cluster (không phải local), đảm bảo hiệu suất cao và không tải data về driver node.
  • Theo docs Azure ML v2 (2024-2026), đây là cách chuẩn để script đọc multi-file datasets mà không cần download thủ công.

📋 Giải thích tất cả các phương án

  • ❌ [SAI] inputs=[file_dataset.as_named_input('training_files')],
    Phương án này chỉ tạo named input cơ bản, nhưng không mount folder. Script chỉ nhận metadata hoặc path ảo (download qua HTTP), không đọc trực tiếp files trong folder CSV trên remote cluster. Không phù hợp cho multi-file dataset, dẫn đến lỗi khi script cố đọc folder (chỉ dùng cho single-file hoặc small data).

  • ✅ [ĐÚNG] inputs=[file_dataset.as_named_input('training_files').as_mount()],
    Như giải thích trên: Mount folder đầy đủ, script đọc files CSV như local path (ví dụ: os.listdir('./inputs/training_files')). Hoàn hảo cho dataset folder lớn, tiết kiệm bandwidth, hỗ trợ remote training trên AmlCompute.

  • ❌ [SAI] inputs=[file_dataset.as_named_input('training_files').to_pandas_dataframe()],
    .to_pandas_dataframe() chuyển dataset thành DataFrame ngay lập tức trên driver node (local), không truyền folder vào remote. Script trên cluster không nhận được data (chỉ metadata), gây lỗi MemoryError với large CSV folder. Chỉ dùng cho preview small data, không phải training.

  • ❌ [SAI] script_params={'--training_files': file_dataset},
    script_params truyền dataset object trực tiếp như argument (--training_files), nhưng Estimator yêu cầu named inputs cho datasets. Script nhận object không serialize được trên remote (lỗi serialization), không mount/read files. Dùng cho hyperparameters thuần, không phải datasets.

🧠 Lưu ý bổ sung: Trong Azure ML v2 (từ 2023-2026), khuyến nghị chuyển sang Command thay Estimator, nhưng Estimator vẫn hỗ trợ đầy đủ as_mount(). Test trên portal Azure ML để verify! 🚀

Câu 154
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.

After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.

You create an Azure Machine Learning pipeline named pipeline1 with two steps that contain Python scripts. Data processed by the first step is passed to the second step.

You must update the content of the downstream data source of pipeline1 and run the pipeline again.

You need to ensure the new run of pipeline1 fully processes the updated content.

Solution: Change the value of the compute_target parameter of the PythonScriptStep object in the two steps.

Does the solution meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm về Azure Machine Learning Pipelines

Xin chào! Tôi là một Microsoft Azure Data Scientist chuyên sâu về Azure Machine Learning (Azure ML). Hôm nay, tôi sẽ phân tích kỹ câu hỏi trắc nghiệm này theo yêu cầu của bạn. Câu hỏi thuộc dạng "Does the solution meet the goal?" – một kiểu phổ biến trong các kỳ thi chứng chỉ Azure (như DP-100). Chủ đề tập trung vào Azure ML Pipelines, không liên quan trực tiếp đến AWS (có thể là nhầm lẫn nhỏ). Tôi sử dụng kiến thức cập nhật đến năm 2026, dựa trên phiên bản Azure ML SDK v2 (preview/stable đến 2024-2026) và tài liệu chính thức từ Microsoft Learn. 📘

1. 📖 Giải thích nội dung câu hỏi một cách chi tiết và rõ ràng

Câu hỏi mô tả một Azure Machine Learning pipeline tên pipeline1 gồm hai steps (bước), mỗi step chứa Python scripts. Dữ liệu được xử lý bởi step đầu tiên sẽ được truyền trực tiếp sang step thứ hai (data flow: Step 1 → Step 2).

  • Yêu cầu chính (goal): Bạn đã cập nhật nội dung (update the content) của downstream data source (nguồn dữ liệu ở phía sau/downstream của pipeline). Sau đó, chạy lại pipeline và đảm bảo run mới sẽ xử lý đầy đủ (fully processes) nội dung đã cập nhật.

    • Downstream data source: Thường ám chỉ nguồn dữ liệu đầu vào (input dataset) hoặc dữ liệu liên quan mà pipeline sử dụng/xử lý, và đã được thay đổi (ví dụ: file CSV mới, dataset version mới trong Azure ML Datastores).
  • Giải pháp đề xuất (Solution): Thay đổi giá trị của tham số compute_target trong đối tượng PythonScriptStep của hai steps.

    • compute_target: Chỉ định môi trường tính toán chạy step (ví dụ: AzureML Compute Cluster, AmlCompute, hoặc local).
  • Câu hỏi cốt lõi: Giải pháp này có đạt được mục tiêu (đảm bảo pipeline rerun đầy đủ với dữ liệu mới) hay không?

🛠️ Lưu ý kỹ thuật từ Azure ML (cập nhật 2026): Azure ML Pipelines hỗ trợ caching (bộ nhớ đệm) tự động để tối ưu hóa. Cache dựa trên signature của step (bao gồm script content, inputs/outputs, parameters, environment). Nếu signature không thay đổi, step sẽ reuse cache cũ thay vì rerun – ngay cả khi dữ liệu thực tế (như file trong datastore) đã update. Để force full rerun, cần thay đổi input dataset version, parameters, hoặc disable cache explicitly. Tham khảo: Azure ML Pipeline Caching Docs (v2 SDK, 2024-2026).

2. ✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: No
Lý do: ✅ Giải pháp KHÔNG đạt mục tiêu vì việc thay đổi compute_target chỉ ảnh hưởng đến môi trường chạy (compute resource), KHÔNG làm invalid cache hoặc force pipeline xử lý lại dữ liệu mới từ downstream data source.

  • Nếu cache của steps vẫn valid (dựa trên inputs cũ), pipeline sẽ skip rerun các steps và reuse kết quả cũ → KHÔNG fully processes updated content.
  • Để đạt goal, cần: (i) Sử dụng new dataset version hoặc snapshot mới cho input, (ii) Thay đổi parameters/inputs, hoặc (iii) Set allow_reuse=False khi submit pipeline. Thay đổi compute_target chỉ tạo run mới trên compute khác, nhưng cache vẫn có thể hit nếu signature giống. 🛠️
    Nguồn: Troubleshoot Pipeline Caching - Microsoft Learn (cập nhật 2025).

3. 🔍 Giải thích tất cả các phương án (đúng và sai)

Dưới đây là phân tích từng lựa chọn giữ nguyên văn bản gốc bằng tiếng Anh, kèm giải thích hoàn toàn bằng tiếng Việt với lý do đúng/sai:

  • Yes ❌ [SAI]
    Giải thích: Phương án này sai vì cho rằng thay đổi compute_target sẽ force full rerun. Thực tế, compute_target KHÔNG nằm trong cache signature chính của PythonScriptStep (cache chủ yếu dựa trên script hash, inputs/outputs, params). Dữ liệu downstream updated vẫn bị bỏ qua nếu cache hit → KHÔNG đảm bảo fully processes. Trong Azure ML v2 (2026), compute changes chỉ log khác run ID, không invalid data cache. 🧩

  • No ✅ [ĐÚNG]
    Giải thích: Phương án này đúng vì giải pháp đề xuất KHÔNG giải quyết vấn đề cốt lõi. Cần invalidate cache bằng cách thay đổi input data reference (ví dụ: Dataset.get_by_name(workspace, name='mydata', version='2')) hoặc dùng PipelineExecutionData.from_pipeline_parameters(allow_reuse=False). Thay đổi compute chỉ hữu ích nếu muốn test trên hardware khác, nhưng KHÔNG liên quan đến updated content. 📘 Nguồn tham khảo bổ sung: Azure ML Pipeline Submit Docs.

💡 Kết luận & Mẹo thi cử: Trong các câu hỏi series tương tự (DP-100), hãy chú ý cache mechanism là "bẫy" phổ biến. Để force rerun với data mới, ưu tiên dataset versioning hoặc parameter changes. Nếu cần code sample, tôi có thể cung cấp! 🚀

Câu 155
You are creating a new Azure Machine Learning pipeline using the designer.
The pipeline must train a model using data in a comma-separated values (CSV) file that is published on a website. You have not created a dataset for this file.
You need to ingest the data from the CSV file into the designer pipeline using the minimal administrative effort.
Which module should you add to the pipeline in Designer?
  1. A Convert to CSV
  2. B Enter Data Manually
  3. C Import Data
  4. D Dataset
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào Azure Machine Learning Designer (một công cụ kéo-thả để xây dựng pipeline ML mà không cần code nhiều). Tình huống: Bạn đang tạo pipeline mới để train model sử dụng dữ liệu từ file CSV được publish trên một website (tức là có URL công khai). Bạn chưa tạo dataset cho file này. Nhiệm vụ: Ingest (nhập dữ liệu) vào pipeline với minimal administrative effort (ít nỗ lực quản trị nhất, tránh các bước phức tạp như tạo tài nguyên thủ công).

Mục tiêu chính là chọn module phù hợp trong Designer để import dữ liệu trực tiếp từ URL CSV mà không cần chuẩn bị trước. Đây là kiến thức cốt lõi của Azure ML Designer (phiên bản cập nhật đến 2026, hỗ trợ import từ web/HTTP seamlessly trong pipeline).

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Import Data
🛠️ Lý do: Module Import Data trong Azure ML Designer cho phép import dữ liệu trực tiếp từ URL web (như file CSV trên website) mà không cần tạo dataset trước. Bạn chỉ cần kéo module này vào pipeline, cấu hình URL, và nó sẽ tự động tải dữ liệu vào pipeline với minimal effort (không cần admin setup datastore hay dataset riêng). Điều này lý tưởng cho dữ liệu công khai, hỗ trợ CSV/TSV/JSON từ HTTP/HTTPS. Phù hợp hoàn hảo với yêu cầu "chưa tạo dataset" và "minimal administrative effort".

📋 Giải thích tất cả các phương án (đúng/sai)

  • ❌ Convert to CSV:
    Phương án này sai vì module Convert to CSV chỉ dùng để chuyển đổi dữ liệu đã có trong pipeline (như từ dataset hoặc output khác) sang định dạng CSV. Nó không hỗ trợ import từ URL web, và yêu cầu dữ liệu phải tồn tại sẵn trong pipeline trước. Không giải quyết được việc ingest dữ liệu từ website mà không cần dataset.

  • ❌ Enter Data Manually:
    Phương án này sai vì module Enter Data Manually chỉ cho phép nhập dữ liệu thủ công nhỏ (như paste trực tiếp vào textbox, giới hạn vài trăm dòng). Không phù hợp với file CSV từ website (có thể lớn), và không hỗ trợ URL tự động tải, dẫn đến effort cao (phải copy-paste thủ công) – trái với "minimal administrative effort".

  • ✅ Import Data:
    Phương án này đúng (như đã giải thích ở trên). Module linh hoạt hỗ trợ Web URL trực tiếp cho CSV, tự động parse dữ liệu vào pipeline. Trong Designer v2 (cập nhật 2024+), nó còn hỗ trợ authentication nếu cần, nhưng với website công khai thì zero-config. Hoàn hảo cho pipeline train model nhanh chóng! 🏆

  • ❌ Dataset:
    Phương án này sai vì Dataset không phải là module ingest; nó đại diện cho dataset đã đăng ký trước trong Azure ML workspace (phải tạo thủ công qua UI/CLI/SDK). Yêu cầu administrative effort cao (tạo datastore, upload/register dataset), trong khi câu hỏi nhấn mạnh "chưa tạo dataset" và "minimal effort". Không dùng trực tiếp từ URL web mà không chuẩn bị.

🧠 Lưu ý bổ sung: Trong Azure ML Designer (2026), Import Data là lựa chọn chuẩn cho dữ liệu external nhanh chóng. Nếu dữ liệu private, có thể dùng HTTP Data Collector, nhưng ở đây là website public nên Import Data tối ưu nhất! Nếu cần scale, chuyển sang dataset sau khi prototype.

Câu 156
You are with a time series dataset in Azure Machine Learning Studio.
You need to split your dataset into training and testing subsets by using the Split Data module.
Which splitting mode should you use?
  1. A Recommender Split
  2. B Regular Expression Split
  3. C Relative Expression Split
  4. D Split Rows with the Randomized split parameter set to true
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi tập trung vào việc xử lý dataset chuỗi thời gian (time series dataset) trong Azure Machine Learning Studio (phiên bản classic). Bạn cần sử dụng module Split Data để chia dataset thành hai phần: training subset (dữ liệu huấn luyện) và testing subset (dữ liệu kiểm tra). Vấn đề chính là chọn splitting mode phù hợp để tránh data leakage (rò rỉ dữ liệu từ tương lai vào quá khứ), vốn rất phổ biến với time series nếu split ngẫu nhiên.

Trước khi split, cần sắp xếp dataset theo cột thời gian (sort by time column). Mode split phải đảm bảo phần training lấy dữ liệu thời gian sớm hơn, phần testing lấy thời gian muộn hơn, thường theo tỷ lệ (ví dụ 70/30) hoặc số lượng tuyệt đối, mà không randomize để giữ thứ tự thời gian. Kiến thức dựa trên tài liệu Microsoft Azure ML Studio cập nhật đến 2024 (vẫn áp dụng cho phiên bản mới Azure ML Designer đến 2026, nơi module tương tự với tùy chọn "Randomize rows: No").

📘 Tài liệu tham khảo:

✅ Đáp án đúng

Relative Expression Split
Lý do lựa chọn: Đây là mode phù hợp nhất cho time series vì nó cho phép split theo biểu thức tương đối (relative expression), tức chia theo tỷ lệ phần trăm hoặc công thức tương đối trên số hàng/cột, kết hợp với việc sắp xếp dữ liệu theo thời gian trước đó. Mode này đảm bảo split sequential (theo thứ tự), tránh shuffle ngẫu nhiên gây data leakage. Trong Azure ML Studio, tương đương với tùy chọn Relative rows hoặc Relative columns trong Split Rows mode khi Randomized = false, nhưng câu hỏi nhấn mạnh "Relative Expression Split" như một mode chuyên biệt cho trường hợp tỷ lệ động. Điều này phù hợp phiên bản mới nhất (Designer v2, 2024-2026) hỗ trợ expression linh hoạt cho split tỷ lệ.

🛠️ Giải thích tất cả các phương án

  • ❌ Recommender Split: Phương án sai vì mode này chỉ dành cho hệ thống khuyến nghị (recommender systems), split ma trận user-item thành train/test cho thuật toán như matrix factorization. Không phù hợp với time series thông thường, vì không xử lý thứ tự thời gian mà tập trung vào tương tác user-item.

  • ❌ Regular Expression Split: Phương án sai vì mode này split hàng dựa trên biểu thức chính quy (regex) khớp giá trị cột cụ thể (ví dụ: split nếu cột "date" match pattern). Phù hợp cho dữ liệu categorical/text, nhưng không hiệu quả cho time series cần split theo thứ tự thời gian liên tục, dễ gây lệch nếu regex không khớp đúng sequence.

  • ✅ Relative Expression Split: Phương án đúng như đã giải thích ở trên. 🧩 Mode này hỗ trợ split theo tỷ lệ biểu thức tương đối (relative fraction hoặc formula), lý tưởng cho time series sau khi sort, đảm bảo training lấy dữ liệu quá khứ, testing lấy tương lai mà không randomize.

  • ❌ Split Rows with the Randomized split parameter set to true: Phương án sai vì thiết lập Randomized split = true sẽ xáo trộn ngẫu nhiên (shuffle) toàn bộ dataset trước khi split, dẫn đến data leakage nghiêm trọng trong time series (dữ liệu tương lai lẫn vào training). Với time series, phải set = false để giữ thứ tự sequential; option này chỉ đúng cho dữ liệu độc lập không thời gian.

Câu 157
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You create an Azure Machine Learning service datastore in a workspace. The datastore contains the following files:
✑ /data/2018/Q1.csv
✑ /data/2018/Q2.csv
✑ /data/2018/Q3.csv
✑ /data/2018/Q4.csv
✑ /data/2019/Q1.csv
All files store data in the following format:
id,f1,f2,I
1,1,2,0
2,1,1,1
3,2,1,0
4,2,2,1
You run the following code:
data_store = Datastore.register_azure_blob_container(workspace=ws, 
                                                    datastore_name= 'data_store',
                                                    container_name= 'quarterly_data',
                                                    account_name= 'companydata',
                                                    account_key='NRPxk8duxbM3...',
                                                    create_if_not_exists=False)

You need to create a dataset named training_data and load the data from all files into a single data frame by using the following code:
data_frame = training_data.to_pandas_dataframe()

Solution: Run the following code:
from azureml.core import Dataset
paths = (data_store, 'data/*/ *.csv')
training_data = Dataset.Tabular.from_delimited_files(paths)

Does the solution meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm

📘 Nội dung câu hỏi:
Câu hỏi thuộc dạng series (một tình huống được mô tả chung, mỗi câu hỏi đưa ra một giải pháp riêng biệt để kiểm tra xem giải pháp đó có đạt mục tiêu hay không). Tình huống: Bạn đã tạo một Azure Machine Learning datastore kết nối với Azure Blob Storage container tên quarterly_data, chứa các file CSV theo cấu trúc thư mục:

  • /data/2018/Q1.csv
  • /data/2018/Q2.csv
  • /data/2018/Q3.csv
  • /data/2018/Q4.csv
  • /data/2019/Q1.csv

Mỗi file có định dạng dữ liệu đơn giản (cột: id,f1,f2,I với dữ liệu mẫu).

Mục tiêu (goal): Tạo một dataset tên training_data từ tất cả các file này, sau đó load toàn bộ dữ liệu vào một single Pandas DataFrame bằng lệnh data_frame = training_data.to_pandas_dataframe().

Giải pháp đề xuất (solution): Chạy code sau:

from azureml.core import Dataset
paths = (data_store, 'data/*/ *.csv')
training_data = Dataset.Tabular.from_delimited_files(paths)

Câu hỏi: Does the solution meet the goal? (Giải pháp này có đạt mục tiêu không?)

🛠️ Công nghệ liên quan: Azure Machine Learning (Azure ML) service, sử dụng Dataset.Tabular.from_delimited_files() để tạo Tabular Dataset từ các file delimited (CSV) trong datastore. Pattern path sử dụng glob-style pattern (dựa trên fnmatch) để match nhiều file. Kiến thức cập nhật đến Azure ML SDK v2 (2023-2026), API Dataset ổn định từ v1 và được khuyến nghị dùng mltable ở v2, nhưng code này dùng v1 core.

✅ Đáp án đúng: No

Lý do lựa chọn (bằng tiếng Việt):
Giải pháp KHÔNG đạt mục tiêu vì pattern path 'data/*/ *.csv' chứa khoảng trắng thừa sau dấu * (cụ thể: 'data/*/ *.csv'), dẫn đến không match được bất kỳ file nào. Glob pattern sẽ tìm file có tên bắt đầu bằng khoảng trắng (như ' *.csv'), trong khi các file thực tế là Q1.csv, Q2.csv... không có khoảng trắng. Kết quả: Dataset rỗng, to_pandas_dataframe() sẽ lỗi hoặc DataFrame trống, không load được dữ liệu từ tất cả file vào single DataFrame. Pattern đúng phải là 'data/*/*.csv' để match data/2018/Q1.csv, data/2019/Q1.csv v.v. ( * đầu match thư mục năm như 2018, * sau match tên file Q1.csv).

🔍 Giải thích tất cả các phương án (giữ nguyên văn bản gốc, phân tích bằng tiếng Việt):

  • Yes ❌ SAI
    Phương án này sai vì bỏ qua lỗi syntax trong pattern 'data/*/ *.csv'. Khoảng trắng làm pattern không match file (glob không tìm thấy data/2018/Q1.csv vì yêu cầu tên file bắt đầu bằng space). Dataset sẽ không load dữ liệu, vi phạm mục tiêu tạo single DataFrame từ tất cả file. Trong Azure ML, from_delimited_files() yêu cầu pattern chính xác; nếu không match, nó raise warning hoặc return empty dataset (xem docs: validate default=True).

  • No ✅ ĐÚNG
    Phương án này đúng vì nhận diện chính xác vấn đề: Giải pháp không đạt goal do pattern matching thất bại. Để fix, cần sửa thành paths = (data_store, 'data/*/*.csv') hoặc paths = [(data_store, 'data/2018/*.csv'), (data_store, 'data/2019/*.csv')] để union tất cả file vào một Tabular Dataset, sau đó to_pandas_dataframe() sẽ concatenate dữ liệu từ tất cả CSV thành single DataFrame (Azure ML tự handle union trên cùng schema).

📚 Tài liệu tham khảo (cập nhật mới nhất 2026):

Hy vọng phân tích giúp bạn ôn thi Azure ML Associate (DP-100)! 🚀 Nếu cần code fix đầy đủ, hỏi thêm nhé!

Câu 158 Chọn nhiều đáp án
You create an MLflow model.

You must deploy the model to Azure Machine Learning for batch inference.

You need to create the batch deployment.

Which two components should you use? Each correct answer presents a complete solution.

NOTE: Each correct selection is worth one point.
  1. A Environment
  2. B Model files
  3. C Online endpoint
  4. D Kubernetes online endpoint
  5. E Compute target
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm

📖 Nội dung câu hỏi:
Câu hỏi tập trung vào quy trình triển khai (deploy) một mô hình MLflow đã được tạo ra lên Azure Machine Learning (Azure ML) để thực hiện batch inference (suy luận hàng loạt). Cụ thể, bạn cần tạo batch deployment (triển khai hàng loạt) cho mô hình này. Câu hỏi yêu cầu chọn hai components (thành phần) cần thiết để hoàn thành việc tạo batch deployment. Đây là câu hỏi kiểu multiple correct answers (mỗi đáp án đúng chiếm 1 điểm), thuộc phần thi chứng chỉ Azure ML Associate hoặc tương đương.

🛠️ Bối cảnh kỹ thuật (cập nhật Azure ML SDK v2 năm 2024-2026):

  • MLflow model là định dạng chuẩn từ MLflow framework, Azure ML hỗ trợ deploy trực tiếp qua model catalog (model files bao gồm artifacts như .pkl, conda.yaml).
  • Batch inference khác với real-time (online): Nó xử lý dữ liệu lớn theo lô (batch), sử dụng Batch Endpoints và Batch Deployments trong Azure ML (ra mắt 2022, cập nhật ổn định 2025 với hỗ trợ MLflow native).
  • Quy trình tạo batch deployment: Đăng ký model → Tạo Batch Endpoint → Tạo Batch Deployment với các thành phần cốt lõi như model files và compute target. Không cần online components.

✅ Đáp án đúng và lý do lựa chọn

Hai đáp án đúng là: Model files và Compute target.

Lý do:
🟢 Model files là file artifacts cốt lõi của MLflow model (ví dụ: model.pkl, requirements.txt, MLmodel), được đăng ký vào Azure ML Model Catalog trước khi deploy. Không có model files, batch deployment không thể load và chạy inference.
🟢 Compute target (như AmlCompute cluster hoặc Kubernetes cluster) là tài nguyên tính toán bắt buộc để chạy batch jobs, xử lý input data lớn (ví dụ: Azure Blob Storage). Azure ML SDK v2 yêu cầu chỉ định compute khi tạo BatchDeployment để scale batch inference hiệu quả.
Cả hai là hoàn chỉnh (complete solution) theo docs chính thức, không phụ thuộc environment (có thể infer từ MLflow).

🔍 Giải thích tất cả các phương án (giữ nguyên văn bản gốc)

Dưới đây là phân tích từng lựa chọn, với đánh giá đúng/sai dựa trên Azure ML best practices (SDK v2, MLflow integration 2025+):

  • Environment ❌ SAI
    🛑 Environment (môi trường runtime như conda/docker) là optional hoặc inferred tự động từ MLflow model (qua MLflow's conda.yaml). Không bắt buộc phải chỉ định riêng khi tạo batch deployment cho MLflow; Azure ML sẽ dùng default MLflow environment nếu không cung cấp. Sử dụng nó có thể, nhưng không phải "component" cốt lõi cần thiết.

  • Model files ✅ ĐÚNG
    🟢 Đây là thành phần chính: MLflow model được đóng gói dưới dạng files/artifacts (upload qua mlflow.log_model() hoặc Azure ML CLI az ml model create). BatchDeployment yêu cầu model param trỏ đến model files này để load và inference. Thiếu nó → deployment thất bại.

  • Online endpoint ❌ SAI
    🛑 Online endpoint dùng cho real-time inference (low-latency, managed inference), không hỗ trợ batch processing lớn. Batch dùng Batch Endpoint riêng biệt, tách biệt hoàn toàn theo Azure ML architecture 2024+.

  • Kubernetes online endpoint ❌ SAI
    🛑 Kubernetes online endpoint (AKS-based) dành cho online deployments scale cao (real-time), không dùng cho batch. Batch compute có thể dùng AKS nhưng phải là Batch Deployment trên Batch Endpoint, không phải "online".

  • Compute target ✅ ĐÚNG
    🟢 Compute target (ví dụ: compute="cpu-cluster") là bắt buộc trong BatchDeployment config (BatchDeployment(compute=...)). Nó cung cấp tài nguyên (CPU/GPU clusters) để chạy batch jobs asynchronously, hỗ trợ scaling đến hàng TB data. Cập nhật 2025: Tích hợp serverless compute cho batch.

📘 Tài liệu tham khảo (cập nhật mới nhất 2026)

Hy vọng phân tích này giúp bạn nắm vững Azure ML batch deployment! 🚀 Nếu cần code sample, hãy hỏi thêm.

Câu 159 Chọn nhiều đáp án
You create an Azure Machine Learning workspace. You are preparing a local Python environment on a laptop computer. You want to use the laptop to connect to the workspace and run experiments.
You create the following config.json file.
{
"workspace_name" : "ml-workspace"
}
You must use the Azure Machine Learning SDK to interact with data and experiments in the workspace.
You need to configure the config.json file to connect to the workspace from the Python environment.
Which two additional parameters must you add to the config.json file in order to connect to the workspace? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
  1. A login
  2. B resource_group
  3. C subscription_id
  4. D key
  5. E region
Xem giải thích

🧩 Phân tích chi tiết câu hỏi

Câu hỏi này thuộc chủ đề Azure Machine Learning (Azure ML), tập trung vào việc cấu hình môi trường Python cục bộ (local) trên laptop để kết nối và chạy experiments với một Azure ML workspace đã được tạo.

  • Bối cảnh: Bạn đã tạo một Azure ML workspace và file config.json chỉ chứa thông tin cơ bản: {"workspace_name" : "ml-workspace"}.
  • Mục tiêu: Sử dụng Azure Machine Learning SDK (thư viện Python chính thức của Azure) để tương tác với dữ liệu và experiments trong workspace từ môi trường local.
  • Yêu cầu cụ thể: Cần thêm hai tham số bổ sung vào file config.json để kết nối thành công. Đây là câu hỏi trắc nghiệm multi-select (chọn nhiều đáp án đúng), mỗi đáp án đúng chiếm 1 điểm.
  • Lưu ý quan trọng: File config.json thường nằm trong thư mục .azureml và được sử dụng bởi lệnh như Workspace.from_config() trong SDK để load thông tin workspace mà không cần hard-code.

Câu hỏi kiểm tra kiến thức về cấu trúc config.json chuẩn theo tài liệu Azure ML SDK v2 (phiên bản mới nhất đến năm 2026, không thay đổi lớn từ v1). Không liên quan đến AWS như đề cập ban đầu (có thể là nhầm lẫn).

📘 Tài liệu tham khảo chính thức:

✅ Đáp án đúng: resource_group và subscription_id

Lý do lựa chọn (dựa trên phiên bản Azure ML SDK mới nhất 2026):

  • Để kết nối workspace từ local Python environment, config.json bắt buộc phải có ba thông tin cốt lõi: subscription_id (ID thuê bao Azure), resource_group (nhóm tài nguyên chứa workspace), và workspace_name (tên workspace).
  • File hiện tại chỉ có workspace_name, nên cần bổ sung chính xác hai tham số này để SDK có thể định vị và xác thực workspace qua Azure Resource Manager (ARM).
  • Không cần thông tin xác thực (như key) vì SDK hỗ trợ interactive authentication (CLI login) mặc định. Ví dụ code: from azure.ai.ml import MLClient; ml_client = MLClient.from_config(path="./config.json").

🛠️ Giải thích tất cả các phương án

  • login ❌
    Sai: login không phải là tham số hợp lệ trong config.json. Nó có thể ám chỉ lệnh az login (CLI authentication), nhưng không được thêm trực tiếp vào file. SDK sử dụng token từ CLI đã login, không yêu cầu param này.

  • resource_group ✅
    Đúng: Đây là tham số bắt buộc. resource_group chỉ định nhóm tài nguyên Azure chứa workspace. Không có nó, SDK không thể tìm thấy workspace trong subscription.

  • subscription_id ✅
    Đúng: Đây là tham số bắt buộc. subscription_id là ID duy nhất của Azure subscription (dạng UUID như "12345678-1234-1234-1234-123456789abc"). SDK cần nó để query ARM API và xác định scope tài nguyên.

  • key ❌
    Sai: key (hoặc api_key) là tùy chọn cho xác thực service principal, không bắt buộc khi dùng interactive auth (CLI). Thêm nó có thể dùng cho headless env, nhưng câu hỏi yêu cầu "must" (bắt buộc) cho kết nối cơ bản.

  • region ❌
    Sai: region (vùng như "eastus") không cần trong config.json vì SDK tự động lấy từ metadata workspace qua subscription_id và resource_group. Nó chỉ dùng trong tạo workspace mới, không phải kết nối.

Câu 160
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You create an Azure Machine Learning service datastore in a workspace. The datastore contains the following files:
✑ /data/2018/Q1.csv
✑ /data/2018/Q2.csv
✑ /data/2018/Q3.csv
✑ /data/2018/Q4.csv
✑ /data/2019/Q1.csv
All files store data in the following format:
id,f1,f2,I
1,1,2,0
2,1,1,1
3,2,1,0
4,2,2,1
You run the following code:
data_store = Datastore.register_azure_blob_container(workspace=ws, datastore_name= 'data_store',
    container_name= 'quarterly_data',
    account_name= 'companydata',
    account_key='NRPxk8duxbM3...',
    create_if_not_exists=False)

You need to create a dataset named training_data and load the data from all files into a single data frame by using the following code:
data_frame = training_data.to_pandas_dataframe()

Solution: Run the following code:
from azureml.core import Dataset

paths = [(data_store, 'data/2018/*.csv'), (data_store, 'data/2019/*.csv')]
training_data = Dataset.File.from_files(paths)

Does the solution meet the goal?
  1. A Yes
  2. B No
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi thuộc dạng case study trong kỳ thi chứng chỉ (như Azure AI Engineer Associate hoặc tương tự), nơi bạn phải đánh giá xem giải pháp đề xuất có đạt được mục tiêu hay không. Scenario cụ thể:

  • Datastore đã được tạo: Sử dụng Datastore.register_azure_blob_container() để kết nối với Azure Blob Container tên 'quarterly_data' từ tài khoản 'companydata'. Datastore này chứa các file CSV theo cấu trúc:
    • /data/2018/Q1.csv, /data/2018/Q2.csv, /data/2018/Q3.csv, /data/2018/Q4.csv
    • /data/2019/Q1.csv
  • Định dạng dữ liệu: Mỗi file có header id,f1,f2,I và các dòng dữ liệu mẫu như 1,1,2,0.
  • Mục tiêu (goal):
    • Tạo một dataset tên training_data.
    • Load tất cả dữ liệu từ các file vào một single pandas DataFrame bằng lệnh data_frame = training_data.to_pandas_dataframe().
  • Giải pháp đề xuất (solution):
    from azureml.core import Dataset
    paths = [(data_store, 'data/2018/*.csv'), (data_store, 'data/2019/*.csv')]
    training_data = Dataset.File.from_files(paths)
    
    Giải pháp này sử dụng wildcard pattern (*.csv) để chỉ định đường dẫn từ datastore, nhằm tạo dataset từ các file CSV trong thư mục 2018 và 2019.

Vấn đề cốt lõi: Bạn cần kiểm tra xem giải pháp này có cho phép load tất cả dữ liệu vào single DataFrame qua to_pandas_dataframe() hay không? 📘 Kiến thức cập nhật đến 2026 (Azure ML SDK v2.x): Azure Machine Learning phân biệt rõ FileDataset (từ Dataset.File.from_files()) và TabularDataset (từ Dataset.Tabular.from_delimited_files()). Chỉ TabularDataset mới hỗ trợ trực tiếp to_pandas_dataframe() để merge và load dữ liệu tabular vào pandas DataFrame.

Kết luận nhanh: Giải pháp KHÔNG đạt mục tiêu vì tạo ra FileDataset thay vì TabularDataset, dẫn đến lỗi khi gọi to_pandas_dataframe(). ✅

✅ Đáp án đúng: No

Lý do lựa chọn đáp án đúng (bằng tiếng Việt chi tiết):
🛠️ Giải pháp sử dụng Dataset.File.from_files(paths) chỉ tạo FileDataset, vốn đại diện cho tập hợp các file (không parse nội dung). FileDataset KHÔNG có phương thức to_pandas_dataframe(), nên lệnh data_frame = training_data.to_pandas_dataframe() sẽ báo lỗi (AttributeError: 'FileDataset' object has no attribute 'to_pandas_dataframe').

  • Wildcard *.csv đúng để match tất cả file (Q1.csv đến Q4.csv năm 2018 và Q1.csv năm 2019), nhưng loại dataset sai nên không merge dữ liệu vào single DataFrame.
  • Để đúng, cần dùng Dataset.Tabular.from_delimited_files(paths) để tạo TabularDataset, tự động parse CSV, merge các file có cùng schema thành một bảng duy nhất.
    📘 Nguồn tham khảo:
  • Azure ML Dataset docs (SDK v2, cập nhật 2025): Phân biệt FileDataset vs TabularDataset.
  • FileDataset reference: Không hỗ trợ to_pandas_dataframe().
  • TabularDataset.to_pandas_dataframe(): Chỉ có ở TabularDataset.

📋 Giải thích tất cả các phương án (giữ nguyên văn bản gốc)

  • Yes ❌ SAI:
    Phương án này cho rằng giải pháp đạt mục tiêu, nhưng sai hoàn toàn vì Dataset.File.from_files() tạo FileDataset không hỗ trợ to_pandas_dataframe(). Dữ liệu không được parse/merge tự động thành single DataFrame; bạn phải mount hoặc download thủ công (ví dụ: training_data.download() rồi đọc từng file). Điều này vi phạm goal load trực tiếp qua một lệnh.

  • No ✅ ĐÚNG:
    Phương án này chính xác vì giải pháp không meet the goal. FileDataset chỉ quản lý file paths/wildcards tốt cho training ML (như input cho AutoML), nhưng không phù hợp cho tabular data load vào pandas. Giải pháp đúng thay thế:

    training_data = Dataset.Tabular.from_delimited_files(paths)
    

    Lúc này mới merge tất cả CSV (cùng schema) thành single DataFrame. 🧩