AI

Bright Data에서 수집한 데이터셋을 활용한 MLflow 실험 추적

이 튜토리얼은 Bright Data에서 스크래핑한 Amazon 데이터셋을 사용하여 MLflow 실험 추적 파이프라인을 구축하는 방법을 안내합니다.
2 분 읽기
MLflow Experiment Tracking with Scraped Datasets

이 튜토리얼에서는 다음을 배웁니다:

  • MLflow의 정의와 제공하는 추적 기능.
  • 웹 스크래핑 데이터셋을 기반으로 ML/AI 실험을 구축하는 것이 효과적인 접근법인 이유.
  • MLflow를 사용하여 스크랩된 데이터셋으로 실험 추적을 수행하는 방법.

자, 시작해 보겠습니다!

MLflow란 무엇인가요?

MLflow는 머신 러닝의 전체 라이프사이클을 관리하기 위한 오픈 소스 플랫폼입니다. 모델을 효율적으로 추적, 재현 및 배포할 수 있는 다양한 기능과 풍부한 API를 제공합니다.

MLflow는 실험, 버전 관리, 평가, 배포를 위한 도구를 제공하며 전통적인 머신러닝과 딥러닝 워크플로우를 모두 지원합니다. 이 모든 것이 재현 가능하고 협업적인 방식으로 이루어집니다.

MLflow는 언어에 구애받지 않으며 Python, R, Java에서 작동하고 로컬, 클라우드 및 관리형 환경을 지원합니다. 이는 벤더 중립적이고 매우 유연함을 의미합니다. 또한 GitHub 저장소가 24,000개 이상의 스타를 자랑하는 등 오픈 소스 특성을 유지합니다.

주요 MLflow 기능은 다음과 같습니다:

  • 추적: 실험 기록, 매개변수, 메트릭, 코드 버전 및 아티팩트 추적.
  • 모델: 다양한 플랫폼에 배포하기 위한 모델 패키징을 표준화합니다.
  • 모델 레지스트리: 모델 버전 관리, 단계 전환, 주석을 위한 중앙 집중식 저장소.
  • 프로젝트: 일관성과 재현성을 위해 재사용 가능한 데이터 사이언스 코드를 패키징합니다.
  • AI/LLM 평가: 생성형 AI 또는 LLM 출력을 추적, 비교 및 평가합니다.
  • 통합 및 자동 로깅: scikit-learn, TensorFlow, PyTorch, OpenAI 등과 연동하여 로깅을 자동화합니다.

자세한 내용은 공식 문서를 참조하십시오.

웹 스크래핑 데이터가 포함된 데이터셋이 MLflow 실험에 이상적인 이유

ML/AI 파이프라인 구축 시 데이터 세트의 품질과 다양성은 실험의 성패를 좌우합니다. 스크랩된 웹 데이터는 본질적으로 다양성과 규모를 동시에 제공합니다. 이는 의미 있는 실험을 위한 두 가지 핵심 요소입니다.

소규모 또는 합성 데이터셋과 달리 웹 기반 데이터셋은 실제 세계의 분포, 극단적 사례, 자연스러운 변동성을 포착합니다. 이러한 측면은 모델의 견고성을 높이고 MLflow 실험의 정보 가치를 증대시킵니다. 웹 데이터가 일반적으로 최고의 데이터 소스 중 하나로 평가받는 이유입니다.

Bright Data는 최고의 데이터셋 제공업체로 두각을 나타냅니다. 이 마켓플레이스는 전자상거래와 소매부터 소셜 미디어와 여행에 이르기까지 150개 이상의 분야를 아우르는 ML 및 AI 활용이 가능한 구조화된 데이터셋을 제공합니다. 각 데이터셋은 수백만 개의 레코드를 포함하여 폭과 깊이를 모두 보장합니다.

이 데이터셋들은 웹의 역동적인 특성을 반영하여 정기적으로 업데이트되므로, ML/AI 워크플로를 최신 정보로 훈련하고 평가할 수 있습니다. 이러한 규모, 최신성, ML 준비 완료 형식의 조합은 Bright Data 데이터셋을 MLflow를 활용한 견고하고 재현 가능하며 영향력 있는 실험에 완벽하게 적합하게 만듭니다. 마켓플레이스에서 이용 가능한 데이터셋을 살펴보세요!

MLflow와 Bright Data 데이터셋을 활용한 실험 추적 수행 방법

이 가이드 섹션에서는 MLflow 실험 추적 수행 방법을 배웁니다. 특히 Bright Data의 Amazon 베스트셀러 제품 데이터셋을 사용하여 머신러닝 파이프라인을 구축할 것입니다.

이 파이프라인의 목표는 제품의 평점, 리뷰 수, 브랜드를 기반으로 최종 가격을 예측하는 모델을 훈련하는 것입니다. 이러한 특징들이 제품 가격과 상관관계가 있는 예측 신호를 포함한다는 가정이 전제됩니다.

이 파이프라인은 전처리와 랜덤 포레스트 모델을 결합하고 성능을 평가합니다. 전 과정에서 MLflow는 메트릭, 아티팩트, 데이터셋 및 시스템 리소스 사용량을 추적합니다.

아래 단계를 따라 진행하세요!

필수 조건

이 튜토리얼을 따라하려면 다음이 필요합니다:

1단계: 프로젝트 설정

터미널을 열고 MLflow 실험 프로젝트용 새 폴더를 생성하세요:

mkdir mlflow-experiment-tracking

다음으로 프로젝트 디렉터리로 이동하여 내부에서 Python 가상 환경을 생성합니다:

cd mlflow-experiment-tracking
python -m venv .venv

이제 선호하는 Python IDE에서 프로젝트 폴더를 로드하세요. Python 확장 기능이 설치된 Visual Studio Code 또는 PyCharm Community Edition을 권장합니다.

프로젝트 디렉토리 루트에 experiment.py라는 새 파일을 생성하세요. 프로젝트 구조는 다음과 같아야 합니다:

mlflow-experiment-tracking/
├── .venv/
└── experiment.py

터미널에서 가상 환경을 활성화하세요. Linux 또는 macOS에서는 다음 명령을 실행합니다:

source venv/bin/activate

Windows에서는 다음과 같이 실행하세요:

venv/Scripts/activate

가상 환경이 활성화된 상태에서 프로젝트 종속성을 설치합니다:

pip install mlflow pandas scikit-learn psutil nvidia-ml-py

필요한 라이브러리는 다음과 같습니다:

다음으로 experiment.py에서 필요한 모든 라이브러리를 다음과 같이 임포트합니다:

import json
import mlflow
import pandas as pd
import mlflow.sklearn
from mlflow.data.code_dataset_source import CodeDatasetSource
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import root_mean_squared_error, r2_score
from sklearn.impute import SimpleImputer

잘하셨습니다! 이제 Python 개발 환경이 MLflow에서 ML 및 AI 실험을 추적할 준비가 되었습니다.

2단계: MLflow UI에 익숙해지기

MLflow가 작동하는지 확인하려면 가상 환경이 활성화된 터미널을 열고 MLflow UI를 실행하세요:

mlflow ui

처음 실행 시 MLflow는 실험 데이터를 저장하기 위해 로컬 SQLite 데이터베이스를 초기화합니다. 특히 프로젝트 폴더에 mlflow.db 파일이 생성된 것을 확인할 수 있습니다. 이 파일이 SQLite가 사용하는 로컬 데이터베이스입니다.

터미널에는 다음과 같은 로그가 표시됩니다:

INFO:     Uvicorn running on http://127.0.0.1:5000 (Press CTRL+C to quit)

이는 UI가 실행 중임을 의미합니다. 브라우저를 열고 http://127.0.0.1:5000/로 접속하세요. 다음과 같은 화면이 표시됩니다:
The MLflow UI
이곳은 MLflow UI로, 실험을 관찰하고 추적할 수 있습니다. 메뉴 링크와 사용 가능한 기능을 탐색하며 몇 분간 익숙해지세요. 여기서 ML 프로젝트 진행 중 메트릭, 로그, 아티팩트를 효과적으로 모니터링할 수 있습니다. 잘하셨습니다!

3단계: MLflow 자동 로깅 및 시스템 추적 기능 활성화

experiment.ml 파일에서 MLflow 시스템 메트릭 로깅을 활성화하여 훈련 중 CPU 사용량, 디스크 사용량, RAM 사용량 및 기타 시스템 수준 메트릭을 추적하세요.

# 자동 시스템 메트릭 로깅 활성화 (CPU, 메모리 등)
mlflow.enable_system_metrics_logging()

# scikit-learn 이벤트 자동 로깅
mlflow.sklearn.autolog()

# 시스템 메트릭 샘플링 및 로깅 빈도 설정
mlflow.set_system_metrics_sampling_interval(1)
mlflow.set_system_metrics_samples_before_logging(1) 

이 코드 조각은 자동 로깅도 활성화하여 MLflow가 scikit-learn 이벤트를 자동으로 기록하도록 합니다. 이후 시스템 메트릭 샘플링 간격을 1초로 설정하여 상세하고 빈번한 모니터링을 보장합니다.

훌륭합니다! 이제 MLflow 애플리케이션이 머신러닝 모델 훈련 실험에 대한 유용한 정보를 추적할 것입니다.

4단계: Bright Data에서 스크래핑한 데이터로 소스 데이터셋 가져오기

이제 ML/AI 실험을 수행할 준비가 된 MLflow 설정이 완료되었습니다. 남은 것은 모델 훈련을 위한 데이터 소스입니다. 앞서 언급한 바와 같이, Bright Data의 Amazon 베스트셀러 데이터셋을 사용하여 랜덤 포레스트 파이프라인 기반의 가격 예측 모델을 구축할 것입니다.

먼저 소스 데이터셋을 가져와야 합니다. 이 데이터셋은 45개 이상의 데이터 필드를 포함하며 1억 7,100만 개 이상의 아마존 베스트셀러 제품을 다룹니다.

Bright Data 계정이 아직 없다면 새로 생성하세요. 기존 계정이 있다면 로그인하십시오. Bright Data 제어판에서 “웹 데이터셋” 메뉴 옵션을 선택합니다. 그런 다음 “데이터셋 마켓플레이스” 탭으로 이동합니다:
Selecting the “Web Datasets” option

“데이터셋 마켓플레이스” 탭으로 이동하세요:
Selecting the “Dataset marketplace” tab

데이터셋 마켓플레이스”페이지로 이동합니다:
The “Dataset marketplace” page
여기서 155개 이상의 도메인에서 수집한 200개 이상의 데이터셋을 탐색할 수 있으며, 수십억 개의 레코드를 이용할 수 있습니다.

“Amazon 베스트셀러 제품”을 검색하여 선택하세요. 그러면 데이터셋 페이지로 이동합니다:
The “Amazon best seller products” page
필터링된 부분 집합을 구매하거나 무료 샘플을 다운로드할 수 있습니다. 본 예시에서는 무료 샘플을 사용하겠습니다.

“샘플 다운로드” 드롭다운을 클릭하고 “JSON으로 다운로드” 옵션을 선택하세요:
Selecting the “Download as JSON” option
1,000개의 아마존 베스트셀러 제품 레코드가 포함된 샘플 데이터셋을 받게 됩니다. 일부 필드는 개인정보 보호를 위해 부분적으로 가려져 있지만(‘***’ 표시), 전체 데이터셋은 결제 후 이용 가능합니다. 그래도 간단한 MLflow 실험에는 샘플로도 충분합니다.

또는 전용 GitHub 저장소에서 유사한 샘플 데이터셋을 다운로드할 수도 있습니다.

다운로드한 데이터셋 파일 이름을 products.json 으로 변경하고 프로젝트 폴더에 배치하세요:

mlflow-experiment-tracking/
├── .venv/
├── experiment.py
├── mlflow.db
└── products.json # <--------

파일을 열면 다음과 같은 내용을 확인할 수 있습니다:
Exploring the dataset in Visual Studio Code
각 아마존 상품은 약 45개의 데이터 필드를 포함하는 JSON 객체로 표현됩니다. 이는 실험을 위한 풍부한 기반을 제공합니다.

완벽합니다! 이제 이 데이터셋을 코드에 로드하고 처리할 준비가 되었습니다.

5단계: 데이터셋 로드 및 전처리

데이터셋을 코드에 로드하기 전에 사용 가능한 열을 살펴보세요. “사전(Dictionary)” 탭으로 이동하면 각 열에 대한 상세 정보(설명 및 존재 비율 포함)를 확인할 수 있습니다:

이 경우 관심 있는 열은 다음과 같습니다:

  • brand (텍스트): 제품과 연관된 브랜드.
  • final_price (가격): 제품의 할인된 가격 또는 최종 가격.
  • reviews_count (숫자): 총 리뷰 수.
  • rating (number): 제품 평균 평점.

이제 JSON 파일을 로드합니다:

with open("products.json", "r", encoding="utf-8") as f:
    data = json.load(f)

그런 다음 pandas DataFrame으로 변환합니다:

df = pd.DataFrame(data)

final_price 열을 살펴보면, 때로는 숫자 값만 포함된 경우(예: 1500)도 있고, 다른 경우에는 서식이 적용된 문자열(예: $1,500)이 포함된 경우도 있음을 알 수 있습니다.

일관된 처리를 위해 모든 가격을 숫자 형식으로 변환하고 final_price가 null인 행은 삭제합니다:

df["final_price"] = pd.to_numeric(
    df["final_price"].astype(str).str.replace(r"[$,]", "", regex=True),
    errors="coerce")

df = df.dropna(subset=["final_price"])

마지막으로 MLflow에 데이터셋을 등록합니다:

# 특징 열과 대상 열 정의
FEATURES = ["rating", "reviews_count", "brand"]
TARGET = "final_price"

# 데이터셋 소스 명시적 정의
dataset_source = CodeDatasetSource(tags="v1")

# 메타데이터와 함께 MLflow에 데이터셋 등록
mlflow_dataset = mlflow.data.from_pandas(
    df[FEATURES + [TARGET]],
    source=dataset_source,
    name="brightdata_products",
    targets=TARGET
)

이 코드는 ML 파이프라인을 위한 입력 특징(rating, reviews_count, brand)과 목표 변수(final_price)를 정의합니다. 그런 다음 CodeDatasetSource 객체를 생성하고 선택한 DataFrame을 메타데이터와 함께 MLflow에 등록하여 실험 추적 및 재현성을 보장합니다.

훌륭합니다! 이제 모델 훈련 파이프라인에서 이 데이터를 사용할 준비가 되었습니다.

6단계: 예측 모델 파이프라인 정의

다음 로직을 사용하여 ML 모델 훈련을 위한 데이터를 준비하세요:

# 특징과 목표값 분리
X = df[FEATURES]
y = df[TARGET]

# 전처리 파이프라인:
# - 숫자형 열에 대한 중앙값 보충
# - 범주형 열에 대한 상수값 채움 + 원핫 인코딩
preprocessor = ColumnTransformer(
    transformers=[
        ("num", SimpleImputer(strategy="median"), ["rating", "reviews_count"]),
        ("cat", Pipeline([
            ("imputer", SimpleImputer(strategy="constant", fill_value="unknown")),
            ("onehot", OneHotEncoder(handle_unknown="ignore"))
        ]), ["brand"]),
    ]
)

# 전체 머신러닝 파이프라인: 전처리 + 랜덤 포레스트 모델
pipeline = Pipeline(steps=[
    ("preprocessor", preprocessor),
    ("model", RandomForestRegressor(n_estimators=200, max_depth=None, random_state=42))
])

# 데이터셋을 훈련 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

이 코드 조각은 데이터를 준비하고 다음과 같은 완전한 머신러닝 파이프라인을 구축합니다:

  1. 입력 특징(rating, reviews_count, brand)을 목표값(final_price)과 분리합니다.
  2. 수치형 특징은 중앙값 보간법으로, 범주형 특징은 상수 값으로 누락값을 처리한 후, 브랜드 텍스트 필드를 원핫 인코딩하여 수치 형식으로 변환합니다. 이러한 조치로 모델이 깨끗한 수치형 입력을 받도록 보장합니다.
  3. 전처리된 데이터를 랜덤 포레스트 모델에 결합하고, 평가를 위해 데이터를 훈련 세트와 테스트 세트로 분할합니다.

좋아요! 이제 Bright Data에서 수집한 데이터셋으로 MLflow 실험을 실행할 차례입니다.

7단계: MLflow 실험 실행

이제 MLflow 실험을 실행할 모든 구성 요소가 준비되었습니다. 다음 명령어로 실행하세요:

# MLflow 실행 시작 및 시스템 메트릭 추적 활성화
with mlflow.start_run(log_system_metrics=True) as run:
    # 실행 입력으로 데이터셋 기록
    mlflow.log_input(mlflow_dataset, context="training")

    # 모델 파이프라인 훈련
    pipeline.fit(X_train, y_train)

    # 테스트 세트에 대한 예측 생성
    predictions = pipeline.predict(X_test)

    # 평가 지표(RMSE 및 R2) 기록
    mlflow.log_metric("val_rmse", root_mean_squared_error(y_test, predictions))
    mlflow.log_metric("r2_score", r2_score(y_test, predictions))

    # 출력 데이터셋 CSV를 로컬 파일에 기록한 후 MLflow의 아티팩트로 저장
    csv_path = "cleaned_dataset.csv"
    df.to_csv(csv_path, index=False, encoding="utf-8-sig", errors="replace")
    mlflow.log_artifact(csv_path)

    # 서명 및 예제 입력과 함께 훈련된 모델을 기록합니다
    mlflow.sklearn.log_model(
        sk_model=pipeline,
        name="model",
        signature=mlflow.models.infer_signature(X_train, predictions),
        input_example=X_train.iloc[:3],
    )

print(f"실행 완료. MLflow UI의 '시스템 메트릭' 탭에서 실행 ID: {run.info.run_id}를 확인하세요.")

위 코드 조각은 다음과 같은 작업을 수행합니다:

  1. 시스템 메트릭 추적이 활성화된 MLflow 실행을 시작합니다.
  2. 추적 가능성과 재현성을 위해 mlflow_dataset을 실험의 입력으로 등록합니다.
  3. 훈련 데이터에 전체 ML 파이프라인(전처리 + 랜덤 포레스트)을 적용하여 모델 파이프라인을 훈련합니다.
  4. 훈련된 모델을 활용하여 테스트 세트의 목표값을 예측합니다.
  5. 모델 성능 평가를 위해 MLflow에 RMSE 및 R² 기록합니다.
  6. 정제된 데이터셋을 아티팩트로 기록하여 MLflow에서 참조용으로 탐색할 수 있도록 합니다.
  7. 재현성을 위해 입력 시그니처와 예제 입력을 포함하여 훈련된 파이프라인을 MLflow에 등록합니다.

좋아요! 이제 최종 코드를 살펴보고 MLflow 실험을 실행하기만 하면 됩니다.

8단계: 모든 것을 통합하고 실험 실행하기

experiment.py 파일에는 다음이 포함되어야 합니다:

# pip install mlflow pandas scikit-learn psutil nvidia-ml-py

import json
import mlflow
import pandas as pd
import mlflow.sklearn
from mlflow.data.code_dataset_source import CodeDatasetSource
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import root_mean_squared_error, r2_score
from sklearn.impute import SimpleImputer


# 자동 시스템 메트릭 로깅 활성화 (CPU, 메모리 등)
mlflow.enable_system_metrics_logging()

# sklearn 이벤트 자동 로깅
mlflow.sklearn.autolog()

# 시스템 메트릭 샘플링 및 로깅 빈도 설정 (1초)
mlflow.set_system_metrics_sampling_interval(1)
mlflow.set_system_metrics_samples_before_logging(1)

# 입력 Bright Data 데이터셋 파일에서 스크랩된 제품 데이터 로드
# (다운로드 위치: /cp/datasets/browse/gd_l1vijixj9g2vp7563)
with open("products.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# JSON을 pandas DataFrame으로 변환
df = pd.DataFrame(data)

# 대상 "final_price" 열 정리:
# - 달러 기호와 쉼표 제거
# - 숫자형으로 변환
# - 유효하지 않은 값은 NaN으로 처리
df["final_price"] = pd.to_numeric(
    df["final_price"].astype(str).str.replace(r"[$,]", "", regex=True),
    errors="coerce")


# 대상 값이 누락된 행 제거
df = df.dropna(subset=["final_price"])

# 특징 열과 목표 열 정의
FEATURES = ["rating", "reviews_count", "brand"]
TARGET = "final_price"

# 데이터셋 소스 명시적 정의
dataset_source = CodeDatasetSource(tags="v1")

# 메타데이터와 함께 MLflow에 데이터셋 등록
mlflow_dataset = mlflow.data.from_pandas(
    df[FEATURES + [TARGET]],
    source=dataset_source,
    name="brightdata_products",
    targets=TARGET)


# 특징과 목표값 분리
X = df[FEATURES]
y = df[TARGET][TARGET]

# 전처리 파이프라인:
# - 숫자형 열에 대한 중앙값 보간
# - 범주형 열에 대한 상수값 채우기 + 원핫 인코딩
preprocessor = ColumnTransformer(
    transformers=[
        ("num", SimpleImputer(strategy="median"), ["rating", "reviews_count"]),
        ("cat", Pipeline([
            ("imputer", SimpleImputer(strategy="constant", fill_value="unknown")),
            ("onehot", OneHotEncoder(handle_unknown="ignore"))
        ]), ["brand"]),
    ]
)

# 전체 머신러닝 파이프라인: 전처리 + 랜덤 포레스트 모델
pipeline = Pipeline(steps=[
    ("preprocessor", preprocessor),
    ("model", RandomForestRegressor(n_estimators=200, max_depth=None, random_state=42))
])

# 데이터셋을 훈련 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# MLflow 실험 설정
mlflow.set_experiment("brightdata_product_price_prediction")

# MLflow 실행 시작 및 시스템 메트릭 추적 활성화
with mlflow.start_run(log_system_metrics=True) as run:
    # 실행 입력으로 데이터셋 기록
    mlflow.log_input(mlflow_dataset, context="training")

    # 모델 파이프라인 훈련
    pipeline.fit(X_train, y_train)

    # 테스트 세트에 대한 예측 생성
    predictions = pipeline.predict(X_test)

    # 평가 지표(RMSE 및 R2) 기록
    mlflow.log_metric("val_rmse", root_mean_squared_error(y_test, predictions))
    mlflow.log_metric("r2_score", r2_score(y_test, predictions))

    # 출력 데이터셋 CSV를 로컬 파일에 기록한 후 MLflow의 아티팩트로 저장
    csv_path = "cleaned_dataset.csv"
    df.to_csv(csv_path, index=False, encoding="utf-8-sig", errors="replace")
    mlflow.log_artifact(csv_path)

    # 서명 및 예제 입력과 함께 훈련된 모델을 기록합니다
    mlflow.sklearn.log_model(
        sk_model=pipeline,
        name="model",
        signature=mlflow.models.infer_signature(X_train, predictions),
        input_example=X_train.iloc[:3],
    )

print(f"실행 완료. MLflow UI의 '시스템 메트릭' 탭에서 실행 ID: {run.info.run_id}를 확인하세요.")

Python 환경을 활성화한 상태에서 다음 명령어로 MLflow 실험을 실행하세요:

python experiment.py

실행에는 몇 초가 소요될 수 있으니 기다려 주세요.

미션 완료! 방금 Bright Data에서 스크래핑한 데이터셋으로 MLflow 실험 추적 파이프라인을 구현했습니다.

9단계: MLflow 추적 결과 살펴보기

http://127.0.0.1:5000/에서 MLflow UI를 방문하세요. brightdata_product_price_prediction 실험 항목(코드에서 MLflow 실험에 부여된 이름)이 표시됩니다. 클릭하세요:
Selecting the “brightdata_product_price_prediction experiment” experiment

자세한 내용을 보려면 “Training runs” 섹션으로 이동하세요:
Choosing the “Training runs” option

방금 실행한 마지막 런이 표시됩니다:
Inspecting the experiment’s run

클릭하면 15개 이상의 메트릭을 즉시 확인할 수 있습니다:
Inspecting the run's metrics
여기에는 MLflow 추적 기능이 자동으로 수집한 시스템 및 모델 메트릭과 실행 중 기록된 모델 메트릭(예: val_rmse, r2_score)이 포함됩니다.

모델 메트릭을 확인하려면 해당 탭으로 이동하세요:
The “Model metrics” tab

또는 “시스템 메트릭” 탭에서 시스템 메트릭 차트를 검토하세요:
The “System metrics” tab

또한 “아티팩트” 섹션에서는 출력 파일(코드에 기록된 cleaned_dataset.csv 파일 등)을 확인할 수 있습니다:
Exploring the cleaned_dataset.csv logged artifact
이것들은 Bright Data에서 스크래핑한 데이터셋을 기반으로 구축된 MLflow 실험 덕분에 추적할 수 있는 메트릭 및 출력물 중 일부에 불과합니다!

단계 #10: 결과에 대한 코멘트

모델 훈련 과정이 제대로 작동했는지 확인하려면 모델 메트릭에 집중하세요:
The model metrics
이러한 모델 메트릭을 기준으로 볼 때, 현재 파이프라인은 검증 세트에서 의미 없는 예측을 생성할 가능성이 높습니다. 훈련 R² 값 0.36은 모델이 훈련 데이터의 분산 중 약 36%를 설명한다는 것을 의미하며, 이는 다소 낮은 수준입니다. 훈련 RMSE(546)와 MAE(약70)는 일반적인 제품 가격 대비 오류가 상당히 높음을 시사하며, 이는 데이터의 잡음이나 특징과 목표 변수 간의 약한 상관관계 때문일 수 있습니다.

더 우려되는 점은 검증 성능입니다: R²이 음수(-1.71)이며 검증 RMSE(167)도 여전히 상당합니다. 음수 R²은 모델이 모든 샘플의 평균 가격을 예측하는 것보다 성능이 떨어짐을 의미합니다. 이는 평점, 리뷰_수, 브랜드, 최종_가격 간의 가정된 관계가 랜덤 포레스트가 효과적으로 포착하기에 충분히 강력하거나 선형적이지 않을 수 있음을 시사합니다!

개선 방안으로는 특징 집합 확장, 특징 공학 수행(예: 리뷰 수 로그 변환, 브랜드 인기도 인코딩), 그라디언트 부스팅이나 XGBoost 같은 대체 모델 시도, 1,000개 샘플 하위 집합을 넘어 데이터셋 크기 증대가 있습니다. 더 큰 Bright Data 데이터셋을 활용하면 더 많은 데이터와 다양성을 확보하여 심층적이고 관련성 높은 실험이 가능해집니다.

요약하자면, 현재 파이프라인은 기술적으로는 작동하지만 근본적인 가격 패턴을 적절히 포착하지 못합니다. MLflow 실험 추적 덕분에 이 머신러닝 파이프라인의 기반 가정이 아마도 결함이 있을 수 있음을 식별할 수 있었습니다.

다음 단계

Bright Data 데이터셋을 활용한 AI 파이프라인(미세 조정 또는 RAG) MLflow로 추적하려면, MLflow 추적이 OpenTelemetry와 완벽히 호환된다는 점을 기억하세요. 특히 MLflow는 요청의 모든 중간 단계에 대한 입력, 출력 및 메타데이터를 캡처하는 LLM 관측 가능성 솔루션을 제공합니다.

OpenAI와 통합할 때는 다음 코드로 쉽게 활성화할 수 있습니다:

import mlflow

mlflow.openai.autolog() 

자세한 내용은 공식 MLflow 문서를 참조하십시오.

결론

이 튜토리얼에서는 머신러닝 및 AI 파이프라인 구축과 추적을 위해 MLflow가 제공하는 기능을 살펴보았습니다. 또한 스크래핑된 데이터셋이 모델 훈련 또는 미세 조정에 탁월한 소스인 이유도 이해하셨을 것입니다.

시연된 바와 같이, Bright Data는 수백 개의 도메인과 수십억 개의 웹 데이터 레코드를 아우르는 풍부한 데이터셋 마켓플레이스를 제공합니다. 이러한 데이터셋은 머신러닝 및 AI 워크플로우를 지원하기 위해 웹 스크래핑을 통해 지속적으로 업데이트됩니다. 구체적으로, 여기에서 보여준 것처럼 MLflow 추적과 완벽하게 호환됩니다.

무료 Bright Data 계정을 생성하고 오늘 바로 웹 데이터 솔루션을 탐색해 보세요!