본문 바로가기
AI & 생성형 AI 활용

파이썬으로 AI 모델 학습 데이터를 수집하는 가장 효율적인 방법

by ICT리더 리치 2025. 4. 22.
반응형

"데이터 없이는 AI도 없다!" 지금 이 순간에도 수많은 AI가 예측을 수행하고 있지만, 그 출발은 언제나 데이터 수집입니다.

안녕하세요. 오늘 포스팅에서는 OpenAPI를 활용해 예측 모델을 만드는 전 과정을 함께 살펴보겠습니다.

데이터 수집부터 전처리, 학습, 배포 그리고 자동화까지. AI 예측 시스템을 실무에 적용하는 데 필요한 전체 워크플로우를 직접 체험해보세요. 특히 초보자부터 실무 개발자까지 모두 이해할 수 있도록 구성했습니다!

스마트하고 신뢰감 있는 20대 한국인 여성 AI 강사
스마트하고 환하게 웃는 AI 전문 여성강사 모습

1. AI 예측 프로젝트 개요 및 목표 설정

AI 예측 시스템을 구축하는 목적은 단순히 데이터를 수집하고 분석하는 데 그치지 않습니다. 실제 비즈니스에서 예측 가능한 인사이트를 제공하고, 자동화된 의사결정 시스템을 구현하는 것이 핵심입니다.

이번 프로젝트에서는 공공 OpenAPI 데이터를 활용해 날씨 데이터를 수집하고, 머신러닝을 통해 비나 눈이 올 확률을 예측하는 흐름을 다룹니다. 실전 흐름을 통해 수집 → 분석 → 예측 → 배포까지 전 과정을 단계별로 체험할 수 있도록 설계했습니다.

실무에선 단순히 코드만 짜는 것이 아니라, 프로젝트 목표를 명확히 정의하고 KPI를 설정하는 것이 중요합니다. 예를 들어, "서울 지역의 다음날 강수 확률을 85% 이상의 정확도로 예측한다"는 식으로 구체화해야 실질적인 성과를 도출할 수 있어요.

 

2. 사용할 OpenAPI 선정 및 구조 분석

AI 예측에 필요한 데이터는 신뢰성 있는 공개 API에서 얻는 것이 가장 효율적입니다. 본 프로젝트에서는 기상청 날씨 데이터 OpenAPI를 사용해 실시간 및 예보 데이터를 수집합니다.

공공데이터포털(data.go.kr)에서 제공하는 API는 인증키 기반으로 작동하며, 주로 RESTful 형식의 URL 호출을 통해 데이터를 JSON 또는 XML 형태로 응답받습니다.

 

📌 예시: 날씨예보 API 호출 URL 구조

GET http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst
?serviceKey={인증키}
&numOfRows=10
&pageNo=1
&dataType=JSON
&base_date=20250401
&base_time=0500
&nx=60
&ny=127

OpenAPI 구조를 분석할 때는 다음 3가지를 중점적으로 봐야 합니다:

  • 요청 파라미터: 날짜, 지역 코드 등 필요한 값 입력 방식
  • 응답 포맷: JSON 또는 XML 구조 및 주요 필드
  • Rate Limit: 하루 혹은 시간당 호출 제한 (대부분 1,000회 이상)

이 과정을 통해 우리가 사용할 데이터의 포맷과 의미를 정확히 이해할 수 있어야 이후의 파싱, 전처리 작업도 수월해집니다.

3. 데이터 수집 및 저장 (requests 사용)

머신러닝 예측 모델을 만들기 위해선 먼저 고품질의 데이터가 필요합니다. 이 단계에서는 파이썬 requests 라이브러리를 활용해 오픈API나 웹에서 데이터를 수집하는 방법을 다룹니다. 예측 프로젝트의 첫 번째 실질적 작업이기도 하죠.

 

📌 데이터 수집 기본 흐름

  • 수집할 OpenAPI 또는 웹 URL 정의
  • requests로 JSON 또는 HTML 요청
  • 필요한 데이터 추출 (json, bs4 등)
  • pandas로 가공 후 CSV 저장

📂 실전 예시: JSON API 수집 및 저장

import requests
import pandas as pd

# 1. OpenAPI 호출
url = "https://api.odcloud.kr/api/15077586/v1/centers?page=1&perPage=10"
res = requests.get(url)
data = res.json()

# 2. 데이터프레임 변환 및 저장
df = pd.DataFrame(data['data'])
df.to_csv("vaccine_centers.csv", index=False)

print("✅ 저장 완료:", df.shape)

이처럼 requests와 pandas 조합만으로도 강력한 수집 자동화를 구성할 수 있습니다. 이후 수집된 CSV는 전처리 → 학습 → 시각화로 이어지는 파이프라인의 핵심이 됩니다.

※ 다양한 API에 대한 에러 핸들링과 인증키 처리 방법도 함께 고려해 주세요.

4. 데이터 전처리 및 피처 정제 (pandas)

수집된 원시 데이터는 대부분 불필요한 값, 누락 데이터, 이상치 등을 포함하고 있습니다. 머신러닝 모델이 효과적으로 학습되기 위해선 정제된 피처가 필요합니다. 이 단계에서는 pandas를 활용해 데이터를 깔끔하게 다듬는 방법을 살펴보겠습니다.

 

📌 주요 전처리 항목

  • 결측치 처리 (fillna, dropna)
  • 이상치 제거 및 정규화
  • 불필요한 열 삭제 및 피처 선택
  • 범주형 데이터 인코딩 (LabelEncoder, get_dummies)

🔧 실전 예제: 전처리 코드

import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 데이터 로드
df = pd.read_csv("vaccine_centers.csv")

# 1. 결측치 확인 및 제거
df = df.dropna(subset=["address", "facilityName"])

# 2. 새로운 피처 생성 (도시명 추출)
df["city"] = df["address"].apply(lambda x: x.split()[0])

# 3. 범주형 라벨 인코딩
le = LabelEncoder()
df["org_encoded"] = le.fit_transform(df["org"])

# 4. 필요한 열만 선택
df = df[["centerName", "city", "org_encoded"]]

print(df.head())

이렇게 전처리된 데이터는 모델 학습에서 노이즈를 줄이고, 성능을 높이는 데 큰 기여를 합니다. 특히 문자열 → 숫자 형태로 변환하는 인코딩은 머신러닝에 필수적인 단계입니다.

※ 대규모 프로젝트에서는 전처리 파이프라인을 함수 또는 클래스 단위로 정리하는 것이 유지보수에 효과적입니다.

5. 머신러닝 모델 학습 (scikit-learn)

전처리된 데이터를 기반으로 머신러닝 모델을 학습시킬 수 있습니다. Python의 scikit-learn 라이브러리는 간결한 API로 분류, 회귀, 군집화 등 다양한 모델 학습을 손쉽게 구현할 수 있도록 도와줍니다.

 

📌 예시 시나리오

  • 백신센터의 도시명을 기반으로 기관 유형(org_encoded)을 예측하는 분류 문제
  • city를 피처로 사용하고, org_encoded를 타깃으로 설정

🔧 머신러닝 학습 코드

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# 데이터 불러오기
df = pd.read_csv("vaccine_centers_cleaned.csv")

# 피처와 타깃 분리
X = df[["city"]]  # 범주형으로 들어온 상태
y = df["org_encoded"]

# 원-핫 인코딩
X = pd.get_dummies(X)

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 학습
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)
print("정확도:", accuracy_score(y_test, y_pred))

간단한 피처만으로도 꽤 괜찮은 정확도를 도출할 수 있습니다. 하지만 실제로는 다양한 피처 엔지니어링과 하이퍼파라미터 튜닝을 거쳐야 더 높은 성능을 기대할 수 있어요.

💡 참고: 모델 성능 향상을 위해 GridSearchCV, Pipeline, cross_val_score 등의 기법을 추가로 활용할 수 있습니다.

6. 예측 결과 시각화 및 분석

모델의 성능을 숫자 하나(정확도)로 판단하기엔 부족합니다. 실제 예측 결과가 어떤 식으로 분포되어 있는지, 어떤 클래스에서 오류가 많은지를 시각화하면 더 많은 인사이트를 얻을 수 있어요.

 

📊 주요 시각화 방법

  • Confusion Matrix (혼동 행렬)
  • Feature Importance (중요도 시각화)
  • 예측/실제 Label 비교 바차트
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix

# 혼동 행렬
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 5))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")
plt.title("Confusion Matrix")
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.tight_layout()
plt.show()

# 피처 중요도 시각화 (RandomForest 기반)
importances = model.feature_importances_
features = X.columns
plt.figure(figsize=(8, 5))
sns.barplot(x=importances, y=features)
plt.title("Feature Importance")
plt.tight_layout()
plt.show()

이런 시각화를 통해 모델이 특정 클래스에 편향되어 있는지, 피처 중 어떤 변수가 영향을 많이 주는지를 한눈에 파악할 수 있습니다. 실무에서는 모델 성능 이상으로 분석/설명이 중요하답니다.

7. FastAPI로 배포용 REST API 만들기

모델을 학습했다면 이제 실제 서비스나 다른 시스템에서도 사용할 수 있도록 API 형태로 배포할 수 있어야 합니다. FastAPI는 파이썬 기반의 가볍고 빠른 웹 프레임워크로, 머신러닝 예측 결과를 JSON 형태로 제공하는 데 매우 적합해요.

 

📦 FastAPI 배포 구성 예시

from fastapi import FastAPI
from pydantic import BaseModel
import joblib

# 모델과 벡터라이저 불러오기
model = joblib.load("model.pkl")
vectorizer = joblib.load("vectorizer.pkl")

# FastAPI 인스턴스 생성
app = FastAPI()

# 입력 데이터 정의
class TextData(BaseModel):
    text: str

# 예측 API
@app.post("/predict")
def predict(data: TextData):
    vec = vectorizer.transform([data.text])
    pred = model.predict(vec)
    return {"label": int(pred[0])}

위 코드는 `model.pkl`, `vectorizer.pkl` 파일이 준비되어 있어야 작동합니다. FastAPI 서버는 `uvicorn`으로 실행하며 다음 명령어를 사용합니다:

uvicorn main:app --reload

이제 http://localhost:8000/predict로 POST 요청을 보내면 예측 결과를 JSON으로 받을 수 있습니다. 이 구조는 프론트엔드, 모바일 앱, BI 툴과도 쉽게 연동됩니다.

8. 자동화 파이프라인 구축

AI 예측 워크플로우의 완성은 자동화입니다. 데이터를 수집하고, 전처리하고, 예측 모델을 호출하고, 결과를 저장하는 이 모든 과정을 하나의 파이프라인으로 구성하면 운영 효율성반복 분석에 큰 도움이 됩니다.

 

🔄 파이프라인 구성 예

  • 크론(Cron)이나 Airflow로 정기 스케줄링 설정
  • requests로 데이터 수집 및 저장
  • pandas로 전처리 및 feature 변환
  • 학습된 모델을 FastAPI 통해 호출
  • 예측 결과를 DB나 CSV로 저장
# 파이프라인 주요 흐름 예시
import requests
import pandas as pd

# 1. 데이터 수집
url = "https://example.com/api"
response = requests.get(url)
raw_data = response.json()

# 2. 전처리
df = pd.DataFrame(raw_data)
df["text"] = df["text"].str.lower()

# 3. 예측 API 호출
predict_res = requests.post(
    "http://localhost:8000/predict",
    json={"text": df["text"].iloc[0]}
)
print(predict_res.json())

# 4. 결과 저장
df["predicted"] = predict_res.json()["label"]
df.to_csv("prediction_result.csv", index=False)

이런 자동화는 crontab이나 Airflow, Luigi 등으로 확장할 수 있으며, 나아가 AWS Lambda, Cloud Functions를 활용하면 서버리스 방식으로도 운영 가능합니다.

9. 자주 묻는 질문 (FAQ)

Q OpenAPI는 어디서 찾을 수 있나요?

공공데이터포털(data.go.kr), RapidAPI, OpenWeather, 뉴스 API 등에서 무료 및 유료 OpenAPI를 검색할 수 있습니다.

Q FastAPI 대신 Flask도 가능한가요?

네, Flask도 REST API 구축에 매우 적합합니다. 다만 FastAPI는 속도와 자동 문서화 기능에서 우수하다는 평가를 받습니다.

Q 학습 모델을 배포할 때 보안을 어떻게 고려하나요?

HTTPS 적용, JWT 인증, API rate limit 설정, 서버 방화벽 설정 등으로 보안을 강화합니다. 민감한 API 키는 절대 코드에 직접 노출하지 마세요.

Q 무료로 배포할 수 있는 클라우드가 있을까요?

GitHub Pages, Render, Deta, Railway, 그리고 AWS 프리티어 등을 활용하면 무료 또는 저렴한 비용으로 API나 웹 서비스를 배포할 수 있습니다.

10. 마무리 요약 정리

  • OpenAPI를 선정해 데이터 구조를 분석하고,
  • requests로 데이터를 수집한 뒤, pandas로 전처리했습니다.
  • scikit-learn으로 머신러닝 모델을 학습하고,
  • 예측 결과를 시각화하며 성능을 평가했습니다.
  • FastAPI로 REST API 서버를 구축해 실무 배포가 가능하도록 구성했고,
  • 반복 작업은 자동화 파이프라인으로 처리해 효율을 높였습니다.

 

이제 여러분도 OpenAPI 기반의 AI 예측 모델을 처음부터 끝까지 구현할 수 있는 실력을 갖추셨습니다. 실무에 바로 적용해보고, 다양한 데이터로 확장하며 자신의 프로젝트로 발전시켜보세요. 

반응형