"데이터 없이는 AI도 없다!" 지금 이 순간에도 수많은 AI가 예측을 수행하고 있지만, 그 출발은 언제나 데이터 수집입니다.
안녕하세요. 오늘 포스팅에서는 OpenAPI를 활용해 예측 모델을 만드는 전 과정을 함께 살펴보겠습니다.
데이터 수집부터 전처리, 학습, 배포 그리고 자동화까지. 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)
공공데이터포털(data.go.kr), RapidAPI, OpenWeather, 뉴스 API 등에서 무료 및 유료 OpenAPI를 검색할 수 있습니다.
네, Flask도 REST API 구축에 매우 적합합니다. 다만 FastAPI는 속도와 자동 문서화 기능에서 우수하다는 평가를 받습니다.
HTTPS 적용, JWT 인증, API rate limit 설정, 서버 방화벽 설정 등으로 보안을 강화합니다. 민감한 API 키는 절대 코드에 직접 노출하지 마세요.
GitHub Pages, Render, Deta, Railway, 그리고 AWS 프리티어 등을 활용하면 무료 또는 저렴한 비용으로 API나 웹 서비스를 배포할 수 있습니다.
10. 마무리 요약 정리
- OpenAPI를 선정해 데이터 구조를 분석하고,
- requests로 데이터를 수집한 뒤, pandas로 전처리했습니다.
- scikit-learn으로 머신러닝 모델을 학습하고,
- 예측 결과를 시각화하며 성능을 평가했습니다.
- FastAPI로 REST API 서버를 구축해 실무 배포가 가능하도록 구성했고,
- 반복 작업은 자동화 파이프라인으로 처리해 효율을 높였습니다.
이제 여러분도 OpenAPI 기반의 AI 예측 모델을 처음부터 끝까지 구현할 수 있는 실력을 갖추셨습니다. 실무에 바로 적용해보고, 다양한 데이터로 확장하며 자신의 프로젝트로 발전시켜보세요.
'AI & 생성형 AI 활용' 카테고리의 다른 글
2025년 헬스케어 트렌드: 웨어러블 + AI + 데이터가 바꾸는 미래 (0) | 2025.05.03 |
---|---|
AI 기반 사이버 보안: 공격을 예측하고 대응하는 차세대 보안 전략 (1) | 2025.04.24 |
AI 데이터 수집 자동화: 파이썬으로 시작하는 데이터 크롤링과 전처리 (0) | 2025.04.22 |
AI 자동화 수익 시스템으로 월 1,000만 원을 만든 실전 전략 (0) | 2025.04.13 |
ChatGPT + 파이썬으로 만드는 AI 자동화 워크플로우 완벽 가이드 (0) | 2025.04.13 |