ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AI/ML 기반 데이터 분석 시리즈 14화 – ML 학습을 위한 데이터셋 생성 자동화
    기술과 산업/AI 2025. 8. 7. 18:00
    728x90

    좋아요. 이제 슬슬 본격적인 머신러닝 파이프라인 구축 이야기를 해볼 때가 됐죠.

    이번엔 모델 학습에 필요한 ‘데이터셋을 자동으로 만드는 방법’,

    그 중에서도 실무에서 진짜 많이 쓰이는 방식들을 중심으로 이야기해보려 합니다.

     

     

    데이터 분석을 하다 보면 이런 경험, 누구나 한 번쯤은 있을 거예요.

     

    “전처리는 다 했는데, 모델 학습을 돌리려니 또 다른 데이터셋이 필요하네?”
    “매번 새로운 조건으로 학습 데이터를 다시 만들어야 해서 너무 번거로워…”
    “파이프라인이 중간에 꼬여서 지난주 결과랑 이번 주 결과가 아예 다르다는데요…?”

     

    사실 모델링은 생각보다 반복 작업이 많습니다.

    조건 바뀔 때마다 데이터셋을 다시 만들고, 버전 관리하고, 중간 데이터 저장하고…

    그냥 돌려서 나오는 게 아니라, 학습에 맞는 구조로 데이터를 ‘꾸준히, 자동으로’ 준비해주는 파이프라인이 정말 중요합니다.

     

    이번 글에선 바로 이 부분 — ML 학습을 위한 데이터셋 생성 자동화 구조에 대해 이야기해볼게요.

     


     

    왜 ‘자동화된 학습 데이터셋 생성’이 중요한가요?

     

    데이터 분석이 어느 정도 궤도에 오르면, 학습을 반복적으로 돌리는 일이 많아져요.

    A/B 테스트, 기간 조건 변경, 새로운 파생 피처 추가 등.

     

    이때마다 사람이 손으로 데이터를 짜 맞추다 보면…

     

    • 버전이 꼬이고
    • 실험 결과 재현이 안 되고
    • 중복 작업이 늘고
    • 모델 성능 비교가 애매해지고

     

    무엇보다 분석가의 시간이 새어 나갑니다.

    그래서 실무에선 다음과 같은 ‘요구’들이 자연스럽게 생겨요.

     

    • 특정 조건에 맞는 데이터를 매번 손 안 대고 자동으로 만들어줘
    • 학습 데이터는 항상 같은 기준에서 만들어져야 해
    • 중간 결과도 캐싱해두고 재사용 가능하게 해줘

     

    이걸 해결하는 방법이 바로 학습용 데이터셋 생성 자동화입니다.

     


     

    자동화 파이프라인, 어떻게 구성하면 좋을까?

     

    보통은 이렇게 단계적으로 나눠요:

     

    1. 원천 데이터 불러오기 (SQL, CSV, API 등)
    2. 필요한 행/열 필터링
    3. 전처리 (결측값 처리, 타입 변환 등)
    4. 피처 엔지니어링 (날짜 분해, 파생 변수 생성 등)
    5. 타겟(라벨) 정의 및 조합
    6. 최종 데이터셋 저장 (CSV, feather, parquet 등)

     

    이걸 단순 스크립트로 짜도 되지만,

    함수형으로 짜고 config로 관리하거나, 데이터 파이프라인 툴을 쓰는 게 유지보수에 훨씬 좋아요.

     


     

    예시: Python + Config 기반 자동화 구성

    # settings.yaml
    filter:
      start_date: "2023-01-01"
      end_date: "2023-12-31"
    target:
      type: "binary"
      condition: "purchase_count > 0"
    # generate_dataset.py
    def load_data():
        return pd.read_csv("raw_data.csv")
    
    def apply_filter(df, config):
        return df[(df["date"] >= config["start_date"]) & (df["date"] <= config["end_date"])]
    
    def create_target(df, config):
        df["target"] = df["purchase_count"] > 0 if config["type"] == "binary" else df["purchase_count"]
        return df
    
    def build_dataset(config_path):
        config = yaml.safe_load(open(config_path))
        df = load_data()
        df = apply_filter(df, config["filter"])
        df = create_target(df, config["target"])
        df.to_parquet("training_data.parquet")
    
    build_dataset("settings.yaml")

    이렇게 구성하면, 날짜나 조건만 바꿔서 여러 실험을 자동으로 돌릴 수 있어요.

    게다가 재현성도 확보되고, 팀 협업도 쉬워지고요.

     


     

    대용량 데이터라면? Dask / Polars / PySpark 활용도 고려해보자

     

    데이터가 커질수록 pandas는 힘들어집니다.

    이럴 땐 DaskPolars, 또는 분산 처리가 가능한 PySpark 쪽으로 넘어가야 해요.

     

     

    Dask 예시

    import dask.dataframe as dd
    
    df = dd.read_csv("big_data.csv")
    df_filtered = df[df['date'] > '2023-01-01']
    df_filtered.to_parquet("filtered_data.parquet")

     

    Polars 예시 (속도 빠름)

    import polars as pl
    
    df = pl.read_csv("big_data.csv")
    df = df.filter(pl.col("amount") > 0)
    df.write_parquet("dataset.parquet")

     


     

    ML 실험 주기, 어떻게 관리할까?

     

    데이터셋을 자동으로 만드는 건 기본이고,

    이후에는 다음 같은 것도 고려하면 좋아요.

     

    • 학습용 데이터셋의 버전 관리 (날짜 기반, hash 기반 등)
    • 실험 결과(accuracy, auc, f1 등)를 로그로 저장
    • 실험 환경(하이퍼파라미터 등)을 yaml / json으로 기록
    • 모델 + 데이터셋 매칭 정보 저장 (MLflow 등 활용 가능)

     

    이런 구조가 갖춰지면 분석이 훨씬 ‘공학적으로’ 정리됩니다.

     


     

    마무리하며

     

    사실 머신러닝 모델보다 더 중요한 건 ‘데이터’ 그 자체라는 말, 많이 들으셨을 거예요.

    그 데이터를 지속적으로 만들고 다듬고, 같은 기준으로 학습시키고 실험을 반복할 수 있도록 자동화하는 구조

    프로젝트의 퀄리티를 완전히 바꿔놓습니다.

     

    분석가 혼자만 알 수 있는 코드가 아니라,

    다음 사람도 보고 이해할 수 있고, 조건만 바꾸면 반복 학습도 가능한 구조.

    그게 바로 실무에서 말하는 “자동화된 데이터셋 생성”의 진짜 가치입니다.

    728x90
Designed by Tistory.