
OpenAI API와 LangChain 기초
LangChain: LLM 기반 애플리케이션을 쉽게 만들기 위한 프레임워크로 프롬프트, 모델, 출력 처리 등을 블록처럼 조합해서 사용함
LLM 파이프라인을 단순한 문법으로 구성, 다양한 LLM을 동일한 인터페이스로 사용, 빠른 프로토타이핑과 유지보수 용이
Chain = 입력 → 프롬프트 → 모델 → 출력 파싱 promt | model | parser
구성요소 (viz. PromptTemplate, LLM 모델, OutputParser)를 LCEL(|)로 연결
+ CallbackHandler로 체인의 중간 과정에서 실행 흐름을 콘솔에서 확인 가능
RCF 기반 패턴 이상탐지와 예지 시스템
RCF (Random Cut Forest): 이상치는 정상보다 빨리 고립된다는 성질을 이용한 스트리밍 기반 이상탐지 알고리즘
Shingling으로 단순 값 이상이 아닌 추세 붕괴, 진통 패턴 변화, Shape 변화 탐지
단일 포인트가 아닌 연속 구간 벡터화
장점: 스트리밍 삽입, Sliding Window 효과, codisp 기반 점수 산출, 이상 구간 자동 분리
| RCF 동작 흐름 (실내 내부 로직) |
스트리밍 데이터 유입 → Shingling 으로 패턴 벡터 생성 → Reservoir Sampling 으로 대표 샘플 유지 → Forest(다수 트리) 지속 업데이트 → 각 트리에서 고립 난이도(codisp) 계산 → 평균을 활용해 최종 이상 점수 |
* 완전 온라인 학습, 과거 데이터 자동 망각, 환경 변화에 강함
| 탐지 설정 파라미터 | 의미 |
| Interval | 데이터 발생 주기 |
| Frequency | 모델 실행 주기 |
| Window Delay | 최신 데이터 안정화 대기 |
| History | 학습 시작 최소 데이터량 |
* 오탐의 80%는 이 설정 불량에서 발생
| 계층적 방어선 (Hierarchical Defence Line) | 핵심 기법 | |
| 1단 | 즉각 차단 | Point Anomaly, Derivative |
| 2단 | 공정 관리 | SPC, CUSUM, Moving Avg |
| 3단 | 예지 보전 | RCF, IF, LSTM-AE |
실전 파이프 라인:
- 변수 그룹화 - 센서별 X, 물리 장치 단위 O (e.g. 가열부 이상, 온도 + 전류 패턴 동시 이상)
- 데이터 성격별 알고리즘 배치 - [1] 안정적 수치: SPC+ Elliptic, [2] 큰 변동성: IF + CUSUM, [3] 주기성: Change Point
- 앙상블 점수 전략 - [1] Soft Voting: 안전성 중시, [2] Logic Gate: 현장 신뢰도 최고
- 동적 임계치 - 고정 Threshold X, Rolling / Tail Probability / BOCPD O
Early Warning: 고장 후 알림이 아니라 고장 직전의 미묘한 흔들림 포착 via Residual 증가, 기울기 비정상 가속, 분산(진동/전류) 확대
예방 정비, 다운타임 감소, 불량률 감소
- 알람 피로도 관리 - 순간 이상 X, 지속성 + 패턴 중심
- 정상 기준 변동 - Rolling 재학습, 분기별 calibration
- 현장 피드백 반영 - False Positive 학습 반영, 설명 가능한 알람만 살아남음
Note
센서는 물리 의미 기준으로 그룹화 → 1차 방어선은 기울기 분석과 SPC → 대부분 이상은 1차 단계에서 탐지 → 고급 모델은 의심 구간에만 적용 → RCF는 과거 고장 패턴 유사도 확인 → IF는 다변량 조합 이상 탐지 → Change Detection은 분포 구조 변화 감지 → 모든 알람은 어디·왜·어떤 패턴인지 명시 → 알람은 현장이 이해할 수 있는 언어로 전달
| 문제 설명 | solution.py |
| #110 길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다. 큐는 먼저 집어넣은 원소가 먼저 나오는 구조입니다. 이 문제에서는 큐를 배열로 표현하며, 원소가 배열 앞쪽에 있을수록 먼저 집어넣은 원소임을 의미합니다. 즉, pop을 하면 배열의 첫 번째 원소가 추출되며, insert를 하면 배열의 끝에 원소가 추가됩니다. 길이가 같은 두 개의 큐를 나타내는 정수 배열 queue1, queue2가 매개변수로 주어집니다. 각 큐의 원소 합을 같게 만들기 위해 필요한 작업의 최소 횟수를 return 하도록 solution 함수를 완성해주세요. 단, 어떤 방법으로도 각 큐의 원소 합을 같게 만들 수 없는 경우, -1을 return 해주세요. |
def solution(queue1, queue2):
indicator2 = sum(queue1) - int(sum(queue1 + queue2) / 2)
answer = 0
sub_list = (queue1 + queue2 + queue1)[::-1]
add_list = (queue2 + queue1 + queue2)[::-1]
while indicator2 != 0:
try:
if indicator2 > 0:
indicator2 -= sub_list.pop()
else:
indicator2 += add_list.pop()
except:
return -1
answer += 1
return answer
|
'내일배움캠프 QAQC 3기 > 최종 프로젝트' 카테고리의 다른 글
| 최종 프로젝트 6일차: [3] EDA + Sliding Window (0) | 2026.01.06 |
|---|---|
| 최종 프로젝트 5일차: [2] Linear Epitope Prediction (0) | 2026.01.05 |
| 최종 프로젝트 4일차: 고장 데이터 분석과 수명 예측 (0) | 2026.01.02 |
| 최종 프로젝트 3일차: 개인 데이터 기반 챗봇 구현, 신뢰성 분석 기초 (0) | 2025.12.31 |
| 최종 프로젝트 2일차: [1] 프로젝트 개요 및 데이터 전처리 (0) | 2025.12.30 |