AI_Operation_Platform Svelte Themes

Ai_operation_platform

Railway time-series AI operation platform (FastAPI + Svelte)

AI Operation Platform

철도 차량 시계열 데이터 기반 AI 학습 · 운영 통합 플랫폼 FastAPI 백엔드 + Svelte 5 프론트엔드로 구성된 풀스택 웹 애플리케이션

노선 → 편성 → 호차 → 장치 → 센서로 이어지는 자산 계층을 따라 시계열 데이터를 수집하고, 4 단계 워크플로(데이터 생성 → 전처리 → 알고리즘 선택 → 학습 실행)로 AI 모델을 학습 · 등록 · 배포 · 모니터링까지 한 번에 수행할 수 있습니다.


📑 목차

  1. 핵심 기능
  2. 기술 스택
  3. 아키텍처
  4. 디렉토리 구조
  5. 빠른 시작
  6. 학습 워크플로
  7. 전처리 파이프라인
  8. 데이터 모델
  9. 주요 API
  10. 환경 변수
  11. 개발 가이드
  12. 라이선스

✨ 핵심 기능

📊 데이터 관리

  • 계층형 자산 트리 : 노선 → 편성 → 호차 → 장치 → 센서 5단계 계층 등록 / 시각화
  • 시계열 DB 조회 : 시작 / 종료 시간 범위와 태그(센서) 단위로 ts_tag 데이터 조회
  • 파일 업로드 : CSV / Excel(.xlsx, .xls) / JSON 업로드 후 자동 파싱 및 컬럼 추론
  • 클라이언트 미리보기 : 업로드 즉시 SheetJS / 자체 CSV 파서로 정렬된 표 미리보기 (sticky 헤더, zebra)
  • 데이터셋 영속화 : 모든 업로드 / 조회 결과를 Dataset 엔티티로 저장

🧪 데이터 전처리 (확장 파이프라인)

  • 결측치 전략 : drop / mean / median / zero / ffill / keep
  • 이상치 검출 : 3σ 규칙 / IQR (1.5) / Z-score / 미적용 + σ 임계값 슬라이더
  • 스케일링 : Min-Max / Standard / Robust / 미적용 (numpy 직접 구현, sklearn 의존 없음)
  • 시계열 리샘플 : 1m / 5m / 1h (시간 컬럼 자동 탐지 후 평균 집계)
  • 중복 행 제거 + 데이터 품질 점수 (0~100, 결측·이상치 비율 가중)
  • 시각화 : 파이프라인 칩 흐름 / Before-After 통계 / 보존율 게이지 / 태그별 처리표 / 샘플 미리보기

🤖 AI 알고리즘 / 학습

  • 빌트인 알고리즘 : 머신러닝 / 딥러닝 / 이상감지 / 회귀 / 분류 카테고리별 다수
  • 커스텀 알고리즘 : 사용자가 Python 코드로 직접 작성 / 편집 / 버전 관리
  • AI 코드 편집기 : LLM 채팅 기반 코드 작성 보조 (OpenAI 호환)
  • 하이퍼파라미터 자동 추천 : 데이터 크기 · 피처 수 · 알고리즘 특성 기반 최적값 제안
  • 학습 실행 : train/test ratio · epochs · learning rate · dropout · n_estimators · regularization 등
  • 모델 저장 / 등록 : 학습 완료 후 즉시 AIModel 엔티티로 등록, 추론 / 스케줄 / 모니터링 가능

🧠 MoE (Mixture of Experts)

  • 모델 라우터 : 입력 특성에 따라 적절한 전문가 모델로 자동 라우팅
  • MoE 모니터 : 각 전문가의 활용도 / 정확도 / 응답시간 추적
  • MoE 채팅 UI : 자연어 질의로 모델 추론 / 분석 결과 조회

🔔 운영 기능

  • 사용자 인증 : JWT 기반 회원가입 / 로그인 / 권한 관리
  • 알림 시스템 : 학습 완료 · 이상 탐지 · 스케줄 실행 알림
  • 이메일 발송 : 운영 이벤트 자동 통보
  • 스케줄러 : Cron 기반 주기 학습 / 추론 작업
  • 버전 관리 : 알고리즘 / 모델 / 전처리 규칙의 코드 버전 추적

🛠 기술 스택

Backend

영역 라이브러리
웹 프레임워크 FastAPI ≥ 0.109
ASGI 서버 Uvicorn + websockets
ORM SQLAlchemy 2.x + aiosqlite
데이터 검증 Pydantic v2 + pydantic-settings
데이터 처리 pandas, numpy, scipy
머신러닝 scikit-learn ≥ 1.3
파일 파싱 openpyxl (xlsx)
LLM openai (Anthropic / OpenAI 호환 엔드포인트)
HTTP 클라이언트 httpx

Frontend

영역 라이브러리
프레임워크 Svelte 5 (runes mode)
빌드 도구 Vite 6 + @sveltejs/vite-plugin-svelte
스타일링 Tailwind CSS 3 + PostCSS / Autoprefixer
차트 plotly.js-dist-min
스프레드시트 xlsx (SheetJS, dynamic import)

🏗 아키텍처

┌──────────────────────────┐         ┌────────────────────────────┐
│  Svelte 5 Frontend       │  HTTP   │  FastAPI Backend           │
│  (Vite, Tailwind)        │ ◄─────► │  (uvicorn, websockets)     │
│                          │         │                            │
│  • TrainingApp.svelte    │         │  routers/                  │
│  • ModelApp.svelte       │         │   ├─ analysis              │
│  • ScheduleApp.svelte    │         │   ├─ datasets / data_upload│
│  • App.svelte (Setup)    │         │   ├─ devices / sensors     │
│  • lib/components/...    │         │   ├─ training / algorithms │
└──────────────────────────┘         │   ├─ ai_models / moe_chat  │
                                     │   ├─ auth / notifications  │
                                     │   └─ llm_chat / vitzrocell │
                                     │                            │
                                     │  services/                 │
                                     │   ├─ data_processor        │
                                     │   ├─ data_upload           │
                                     │   ├─ ml_service            │
                                     │   ├─ model_executor        │
                                     │   ├─ model_persistence     │
                                     │   ├─ training_enhanced     │
                                     │   ├─ moe_router / monitor  │
                                     │   ├─ scheduler             │
                                     │   ├─ code_versioning       │
                                     │   └─ ai_analyzer           │
                                     │                            │
                                     │  models/  (SQLAlchemy)     │
                                     └────────────────────────────┘
                                                  │
                                                  ▼
                                     ┌────────────────────────────┐
                                     │  SQLite (ai_operation.db)  │
                                     │  + 파일 스토리지            │
                                     │   ├─ uploaded_data/        │
                                     │   ├─ dataset_files/        │
                                     │   └─ saved_models/         │
                                     └────────────────────────────┘

📂 디렉토리 구조

AI_Operation_Platform/
├── backend/
│   ├── app/
│   │   ├── main.py                # FastAPI 엔트리포인트
│   │   ├── config.py              # 환경 설정
│   │   ├── database.py            # DB 세션 / 엔진
│   │   ├── timezone.py            # KST 헬퍼
│   │   ├── seed_data.py           # 초기 시드 데이터
│   │   ├── algorithm_templates.py # 빌트인 알고리즘 정의
│   │   ├── routers/               # 15개 API 라우터
│   │   │   ├── auth.py
│   │   │   ├── vitzrocell.py
│   │   │   ├── analysis.py
│   │   │   ├── llm_chat.py
│   │   │   ├── custom_algorithms.py
│   │   │   ├── training.py
│   │   │   ├── datasets.py
│   │   │   ├── data_upload.py
│   │   │   ├── devices.py
│   │   │   ├── sensors.py
│   │   │   ├── algorithms.py
│   │   │   ├── ai_models.py
│   │   │   ├── learning_options.py
│   │   │   ├── moe_chat.py
│   │   │   └── notifications.py
│   │   ├── services/              # 도메인 서비스
│   │   │   ├── data_processor.py  # 전처리 파이프라인
│   │   │   ├── data_upload.py
│   │   │   ├── ml_service.py
│   │   │   ├── model_executor.py
│   │   │   ├── model_persistence.py
│   │   │   ├── training_enhanced.py
│   │   │   ├── ai_analyzer.py
│   │   │   ├── algorithm_base.py
│   │   │   ├── algorithms/
│   │   │   ├── code_versioning.py
│   │   │   ├── moe_config.py
│   │   │   ├── moe_router.py
│   │   │   ├── moe_monitor.py
│   │   │   ├── auth.py
│   │   │   ├── email_service.py
│   │   │   └── scheduler.py
│   │   ├── models/                # SQLAlchemy ORM 모델
│   │   │   ├── user.py
│   │   │   ├── device.py
│   │   │   ├── sensor.py
│   │   │   ├── dataset.py
│   │   │   ├── algorithm.py
│   │   │   ├── custom_algorithm.py
│   │   │   ├── ai_model.py
│   │   │   ├── training.py
│   │   │   ├── notification.py
│   │   │   ├── chat.py
│   │   │   └── vitzrocell.py
│   │   └── schemas/               # Pydantic 입출력 스키마
│   ├── requirements.txt
│   ├── requirements_extra.txt
│   └── run.py                     # uvicorn 실행기
│
├── frontend/
│   ├── src/
│   │   ├── main.js                # 메인 엔트리 (Setup)
│   │   ├── App.svelte             # 셋업/관리 페이지
│   │   ├── TrainingApp.svelte     # 4단계 학습 워크플로 메인 화면
│   │   ├── ModelApp.svelte        # 등록된 모델 관리
│   │   ├── ScheduleApp.svelte     # 스케줄 / 트리거
│   │   ├── model_main.js
│   │   ├── app.css                # Tailwind 진입 CSS
│   │   └── lib/
│   │       ├── api.js             # REST 클라이언트
│   │       ├── auth.js            # JWT 토큰 관리
│   │       ├── model_api.js
│   │       └── components/
│   │           ├── SetupPage.svelte
│   │           ├── DeviceHierarchySelector.svelte
│   │           ├── DataUpload.svelte
│   │           ├── PreprocessingPanel.svelte
│   │           ├── ModelRegistrationForm.svelte
│   │           ├── MoEChat.svelte
│   │           └── LoginPage.svelte
│   ├── index.html
│   ├── model.html
│   ├── package.json
│   ├── vite.config.js
│   ├── svelte.config.js
│   ├── tailwind.config.js
│   └── postcss.config.js
│
├── start.sh                       # 백엔드+프론트 동시 실행
├── generate_manual.py             # PDF 사용자 매뉴얼 생성기
├── AI_Operation_Platform_사용자매뉴얼.pdf
├── .gitignore
└── README.md                      # ← 이 문서

🚀 빠른 시작

사전 요구사항

  • Python 3.10+
  • Node.js 18+ (권장 20+)
  • Git

1) 클론

git clone https://github.com/masterj7874/AI_Operation_Platform.git
cd AI_Operation_Platform

2) 백엔드 셋업

cd backend
python -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate
pip install -r requirements.txt
pip install -r requirements_extra.txt   # 옵션 기능 (LLM 등)

# .env 파일 작성 (환경 변수 섹션 참고)
cat > .env <<'EOF'
DATABASE_URL=sqlite:///./ai_operation.db
SECRET_KEY=change_me_to_a_random_string
OPENAI_API_KEY=sk-...        # 선택: LLM/AI 코드 편집기 사용 시
EOF

python run.py                  # http://localhost:8040

API 문서: http://localhost:8040/docs (Swagger) · http://localhost:8040/redoc

3) 프론트엔드 셋업

cd frontend
npm install
npm run dev                    # http://localhost:5002

4) 한 번에 실행 (개발용)

./start.sh

Backend: http://localhost:8040 · Frontend: http://localhost:5002

5) 프로덕션 빌드

cd frontend && npm run build   # → frontend/dist
# uvicorn / nginx 등으로 dist 정적 호스팅 + FastAPI 리버스 프록시

🔄 학습 워크플로 (4단계)

모든 단계는 frontend/src/TrainingApp.svelte 한 화면에서 진행되며, 상단 스텝퍼로 진행 상태를 시각화합니다.

① 데이터 생성

PPT 디자인을 따라 한 페이지에 모든 입력을 통합한 단계입니다.

영역 설명
노선 / 편성 선택 상단 드롭다운 2개
현재 장치 구조 (트리) 셋업 페이지와 동일한 트리: 🚃 호차 → ⚙️ 장치 → 📡 센서. 펼침/접힘 토글 + [선택] 버튼으로 태그 추가
선택한 태그 목록 칩 형태로 표시, × 로 제거. ↶ 원상복귀 버튼으로 마지막 삭제 복원, 모두 복원 버튼으로 일괄 복원
시계열 모드 시작/종료 시간 + [데이터 조회] → ts_tag DB 조회 후 통계 카드 + Preview 표
파일 모드 CSV/Excel/JSON 업로드 → 클라이언트 파싱으로 즉시 정렬된 표 미리보기 (sticky 헤더, zebra). 컬럼 구성(tag, 시간, 측정값) 자동 표시

② 데이터 전처리

KNIME / Trifacta / Dataiku 스타일의 풀 페이지 전처리 UI. 자세한 내용은 전처리 파이프라인 섹션 참고.

③ 알고리즘 선택

  • 카테고리 필터(머신러닝 / 딥러닝 / 이상감지 / 회귀 / 분류 / 커스텀)
  • 빌트인 알고리즘 카드 + 커스텀 알고리즘 추가 / 편집 / 삭제
  • 🤖 AI 코드 편집기 : LLM 채팅 기반 알고리즘 코드 작성 / 수정 보조

④ 학습 실행

  • 하이퍼파라미터 자동 추천 (데이터 크기 / 피처 수 기반)
  • 알고리즘별 동적 파라미터 폼: train ratio, epochs, learning rate, dropout, n_estimators, regularization, contamination 등
  • 실행 후 메트릭 / 차트 / 모델 저장 / 모델 등록 → 운영 단계로 이동

🧪 전처리 파이프라인

백엔드 (backend/app/services/data_processor.py)

DataProcessor.preprocess(df, config) 메서드는 다음 순서로 실행됩니다.

  1. 중복 행 제거 (dedup_rows)
  2. 결측치 전략 (missing_strategy)
    • drop : 결측 행 삭제
    • mean / median : 평균 / 중앙값 대체
    • zero : 0 대체
    • ffill : 직전값으로 전방 채움 + bfill
    • keep : 그대로 유지
  3. 이상치 처리 (outlier_method, outlier_sigma)
    • 3sigma / zscore : N-시그마 규칙 (σ 임계값 조절 가능)
    • iqr : 사분위수 1.5 × IQR
    • none : 미적용
  4. 시계열 리샘플 (resample_interval)
    • 시간 컬럼 자동 탐지 (time / timestamp / o_time / datetime / date)
    • 1m / 5m / 1h 간격으로 평균 집계
  5. 정규화 / 스케일링 (normalization)
    • minmax : (x - min) / (max - min)
    • standard : (x - mean) / std
    • robust : (x - median) / IQR
    • none : 미적용

반환 페이로드:

{
  "original_rows": 10000,
  "processed_rows": 9421,
  "removed_missing": 142,
  "removed_outliers": 437,
  "removed_duplicates": 0,
  "statistics": [
    { "column": "AS1_Pressure", "count": 9421, "min": 1.5, "max": 9.4, "avg": 4.8, "std": 1.2 }
  ],
  "sample_data": [ /* 상위 10행 */ ],
  "applied_config": { /* 실제 적용된 PreprocessingConfig */ }
}

프론트엔드 시각화

컴포넌트 설명
데이터 품질 점수 0~100, 색상 코딩 (≥90 emerald / ≥70 yellow / 그 외 red)
전략 카드 4개 🔍 결측치 / 📊 이상치 / 📐 스케일링 / ⏱️ 시계열 옵션
파이프라인 칩 RAW → 결측 → 이상치 → 스케일 → 리샘플 → CLEAN
결과 통계 카드 4개 원본 / 결측 −N / 이상치 −N / 최종
데이터 보존율 게이지 그라데이션 progress bar
태그별 처리표 (시계열) 원본·결측·이상치·최종·보존율 미니바
컬럼 통계표 (파일) count / min / max / avg / std
샘플 미리보기 sticky 헤더, zebra, 모노스페이스
사이드 가이드 전략별 권장 사례 + 학습 준비 완료 카드

💾 데이터 모델

자산 계층 (5단계)

Line (노선)
  └─ Formation (편성)
       └─ Car (호차)
            └─ Device (장치)
                 └─ Sensor (센서)
                      └─ TsTag (시계열 측정값)

주요 엔티티

모델 설명
User 인증 / 권한
Line / Formation / Car / Device / Sensor 자산 계층
Dataset 업로드 파일 또는 DB 조회 결과의 메타데이터 + 전처리 설정
Algorithm / CustomAlgorithm 빌트인 + 사용자 정의 알고리즘
Training 학습 작업 / 메트릭 / 하이퍼파라미터 / 결과
AIModel 등록된 모델 (파일 경로 / 입출력 / 버전)
Notification 시스템 알림
Chat LLM / MoE 채팅 히스토리

🌐 주요 API

전체 명세는 서버 실행 후 http://localhost:8040/docs 에서 확인 가능합니다.

그룹 Prefix 주요 엔드포인트
인증 /api/auth POST /register, POST /login, GET /me
자산 /api/devices, /api/sensors GET /lines, GET /formations, GET /cars, GET /devices/hierarchy/full
데이터셋 /api/datasets POST /upload, POST /{id}/preprocess, GET /preprocessing-rules/list
시계열 분석 /api/analysis GET /dataset/preview, POST /preprocess, GET /optimal-params
알고리즘 /api/algorithms, /api/custom-algorithms GET /, POST /, PUT /{id}, DELETE /{id}
학습 /api/training POST /run, GET /jobs, GET /jobs/{id}
모델 /api/ai-models POST /register, POST /{id}/predict, GET /
MoE /api/moe POST /chat, GET /experts, GET /monitor
알림 /api/notifications GET /, POST /mark-read
LLM /api/llm POST /chat, GET /providers

🔐 환경 변수

backend/.env 파일에 작성합니다.

변수 필수 기본값 설명
DATABASE_URL sqlite:///./ai_operation.db SQLAlchemy 연결 문자열
SECRET_KEY (없음) JWT 서명 키. 충분히 긴 랜덤 문자열 권장
ACCESS_TOKEN_EXPIRE_MINUTES 60 * 24 JWT 만료 시간
OPENAI_API_KEY (없음) LLM 채팅 / AI 코드 편집기 사용 시 필요
OPENAI_BASE_URL (없음) OpenAI 호환 게이트웨이 사용 시
EMAIL_HOST / EMAIL_PORT / EMAIL_USER / EMAIL_PASS (없음) 알림 메일 발송
UPLOAD_DIR ./uploaded_data 업로드 파일 저장 경로
MODEL_DIR ./saved_models 학습된 모델 저장 경로

⚠️ .env*.db 파일은 절대 커밋하지 마세요. .gitignore 에 이미 포함되어 있습니다.


👩‍💻 개발 가이드

백엔드 개발

cd backend
source venv/bin/activate
uvicorn app.main:app --reload --host 0.0.0.0 --port 8040
  • 새 라우터 추가 : app/routers/your_router.py 작성 후 app/main.pyinclude_router 에 등록
  • 새 모델 추가 : app/models/your_model.py 정의 + app/schemas/your_model.py 에 Pydantic 스키마 작성
  • DB 마이그레이션 : 현재 SQLite 자동 생성. 운영 시 Alembic 도입 권장

프론트엔드 개발

cd frontend
npm run dev      # HMR 개발 서버
npm run build    # 프로덕션 번들 (dist/)
npm run preview  # 빌드 결과 로컬 미리보기
  • Svelte 5 runes 모드 ($state, $derived, $props, $effect)
  • 컴포넌트 추가 : src/lib/components/ 하위에 .svelte 파일 작성
  • API 호출 : src/lib/api.js 를 통해 일관된 인터페이스 사용
  • 스타일 : Tailwind 유틸리티 우선, 필요한 경우 app.css 에 글로벌 스타일

코드 스타일

  • Python : ruff / black 권장
  • Svelte : Prettier + prettier-plugin-svelte
  • 커밋 메시지 : 한국어 또는 영어, 본문에 "Why" 중심 서술

빌드 검증

# 프론트엔드 빌드 통과 확인
cd frontend && npx vite build

# 백엔드 임포트 검증
cd backend && python -c "from app.main import app; print('OK')"

📜 라이선스

이 저장소는 사내 / 연구 목적으로 공개되었습니다. 상업적 사용 또는 재배포 전 저장소 소유자에게 문의하십시오.


🤝 기여

이슈 / 풀 리퀘스트 환영합니다. 큰 변경 사항은 먼저 이슈를 열어 논의해 주세요.

📞 문의

GitHub Issues : https://github.com/masterj7874/AI_Operation_Platform/issues


🚄 Made for railway operations · Powered by FastAPI + Svelte 5

Top categories

Loading Svelte Themes