LangChain을 활용해 시계열 데이터 분석 및 이상 탐지 시스템을 구축하는 방법을 단계별로 설명합니다.
본 시스템은 LLM의 자연어 처리 능력과 머신러닝 모델의 분석 기능을 결합해 종합적인 인사이트를 제공합니다.
@tool
def preprocess_data(raw_data: dict) -> pd.DataFrame:
"""시계열 데이터 표준화
Args:
raw_data: {'timestamp': [...], 'values': [...]}
"""
df = pd.DataFrame(raw_data)
df['value'] = (df['value'] - df['value'].mean()) / df['value'].std()
return df
@tool
def detect_anomalies(data: pd.DataFrame, model_type: str = "isolation_forest") -> dict:
"""시계열 데이터 이상 탐지 도구
Args:
data: 시계열 DataFrame (timestamp, value)
model_type: isolation_forest, lstm, stl
Returns:
{'scores': [...], 'threshold': float}
"""
if model_type == "isolation_forest":
model = IsolationForest(contamination=0.05)
scores = model.fit_predict(data[['value']])
return {'scores': scores.tolist(), 'threshold': -0.5}
MODEL_SWITCH_LOGIC = {
"계절성 감지": "stl",
"비선형 패턴": "lstm",
"기본": "isolation_forest"
}
def select_model(data: pd.DataFrame) -> str:
from statsmodels.tsa.seasonal import STL
stl = STL(data['value']).fit()
if stl.seasonal.std() > data['value'].std()*0.3:
return "stl"
# 추가 로직...
from langchain.agents import initialize_agent
from langchain.chat_models import ChatOpenAI
tools = [detect_anomalies, preprocess_data]
llm = ChatOpenAI(model="gpt-4o")
agent = initialize_agent(
tools,
llm,
agent="structured-chat-zero-shot-react-description",
verbose=True
)
from langchain.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "나는 데이터 분석 전문가입니다. 다음 결과를 설명해주세요:"),
("human", "이상 점수: {scores}\n임계값: {threshold}")
])
interpret_chain = prompt | llm
interpret_chain.invoke({
"scores": [-0.1, 0.5, -1.2, ...],
"threshold": -0.5
})
from langchain.cache import SQLiteCache
import langchain
langchain.llm_cache = SQLiteCache("analysis_cache.db")
from langchain.distributed import DistributedAgent
dist_agent = DistributedAgent(
agent,
redis_url="redis://localhost:6379",
task_timeout=300
)
@tool(accelerator="cuda")
def lstm_prediction(data: pd.DataFrame):
import torch
# CUDA 가속 LSTM 모델 실행
# docker-compose.yml
services:
langchain-api:
image: langchain-analytics:v1.0
ports:
- "8000:8000"
depends_on:
- mlflow
- redis
mlflow:
image: mlflow-server:latest
redis:
image: redis:alpine
python -m uvicorn main:app --reload --port 8000
이 시스템은 제조 설비 모니터링, 금융 시간 탐지, IoT 센서 분석 등 다양한 분야에 적용 가능하며, LangChain의 유연한 확장성을 통해 자속적인 기능 향상이 가능합니다.