이 모델은 시계열 데이터를 사용하여 제조 환경에서 재고 수준을 예측하기 위해 설계되었습니다.
Conv1D 레이어를 사용하여 시계열 데이터에서 로컬 특징을 추출하고, BiLSTM 레이어를 사용하여 시간적 의존성을 캡처합니다.
이 모델은 역사적 재고 데이터를 기반으로 훈련되어 미래의 재고 수준을 예측합니다.
Developed by: 다어반권 수석연구원
Funded by: 4INLAB INC.
Shared by: None
Model type: Conv1D + BiLSTM, LSTM, GRU, Transformer 등 시계열 모델
Language(s): Python
License: Apache 2.0, MIT
기술적 제한사항
이 모델은 과거의 재고 패턴을 사용하여 미래의 재고 수준을 예측한다고 가정하지만, 역사적 트렌드에서 극단적인 편차가 발생할 경우 성능이 좋지 않을 수 있습니다.
모델이 적절히 튜닝되지 않으면 과적합이 발생할 수 있으며, 특히 작은 데이터셋에서 그 위험이 큽니다.
학습 세부사항
Hardware
CPU: Intel Core i9-13900K (24 Cores, 32 Threads)
RAM: 64GB DDR5
GPU: NVIDIA RTX 4090Ti 24GB
Storage: 1TB NVMe SSD + 2TB HDD
Operating System: Windows 10/11
데이터셋 정보
이 모델은 시계열 재고 데이터를 사용하여 훈련됩니다. 이 데이터는 재고 수준, 날짜 및 기타 관련 특성에 대한 정보를 포함하고 있습니다.
데이터는 Conv1D와 BiLSTM 레이어에 적합하도록 MinMax 스케일링을 사용하여 전처리되고 정규화됩니다.
Input Layer: Conv1D layer with 128 filters and kernel size of 3.
Hidden Layers:
Conv1D followed by MaxPooling1D.
Bidirectional LSTM layer with 128 units.
Dropout layers to prevent overfitting.
A second Bidirectional LSTM layer with 64 units.
A Dense layer for the final prediction.
Optimizer: Adam optimizer.
Loss Function: Mean Squared Error (MSE).
Metrics: Mean Absolute Error (MAE), SMAPE.
학습 파리미
Learning rate: 0.001
Batch size: 64
Epochs: 50
Time step: 30
Dropout: 0.1
Early stopping: Enabled with a patience of 10 epochs
평가 지표
Accuracy: Percentage of correct predictions.
MAE (Mean Absolute Error): Measures the average magnitude of errors in the predictions.
SMAPE (Symmetric Mean Absolute Percentage Error): Measures prediction accuracy in percentage.
학습 성능 및 테스트 결과 예시
학습 및 검증 손실 그래프:
학습 결과표:
image/png
테스트 결과 그래프:
모델 이력 관리
1차년도에 구축한 생산재고 예측 모델의 성능은 초기 가공이력 기반 단변량 예측 수준에 머물렀고, 실제 운영 적용 시 정확도 편차와 모델 선택 기준의 불명확성이 존재했습니다.
이에 따라 2차년도에는 다양한 딥러닝 알고리즘 실험(CNN-BLSTM, Bi-LSTM, LSTM, GRU, Transformer)을 통해 정확도 고도화, 모델 안정성 확보, 학습 이력 관리체계 구축을 목표로 고도화를 수행했습니다.
재학습 이력 및 성능 추이
동일한 전처리 규격(MinMaxScaler, window=30), 공통 러닝레이트(0.001), Optimizer=Adam 기준.
각 실험은 동일 Seed로 1회 측정(필요 시 3회 평균 권장).
| 재학습 일자 | 모델 번호 | 알고리즘 | 정확도(%) | Epoch 수 | Learning Rate | Optimizer | 특이사항 |
|--------------|:--------:|------------|----------:|--------:|--------------:|-----------|--------------------------|
| 2025-09-07 | 3 | Transformer | 92.10 | 500 | 0.001 | Adam | 안정적 성능 유지 |
| 2025-08-28 | 2 | Transformer | 92.30 | 700 | 0.001 | Adam | 장기 안정화 구간 |
| 2025-08-15 | 1 | Transformer | 90.70 | 600 | 0.001 | Adam | Tranformer 모델 변경 |
| 2025-07-23 | 9 | CNN-BLSTM | 91.50 | 600 | 0.001 | Adam | 유지성 검증 재학습 |
| 2025-07-03 | 8 | CNN-BLSTM | 90.70 | 600 | 0.001 | Adam | LSTM 계열 비교 테스트 |
| 2025-06-17 | 7 | CNN-BLSTM | 91.10 | 600 | 0.001 | Adam | 예측 안정 유지 |
| 2025-05-25 | 6 | CNN-BLSTM | 91.90 | 700 | 0.001 | Adam | 최고 성능(상반기) |
| 2025-05-03 | 2 | GRU | 91.30 | 500 | 0.001 | Adam | 단기 상승세 |
| 2025-04-25 | 17 | Bi-LSTM | 90.10 | 600 | 0.001 | Adam | 안정적 수렴 |
| 2025-04-08 | 16 | Bi-LSTM | 89.70 | 600 | 0.001 | Adam | LSTM 대비 미세 향상 |
| 2025-03-17 | 6 | LSTM | 88.60 | 600 | 0.001 | Adam | 기본 LSTM 모델 테스트 |
| 2025-03-08 | 4 | GRU | 86.20 | 600 | 0.001 | Adam | 정확도 일시적 하락 |
| 2025-02-26 | 14 | Bi-LSTM | 88.50 | 600 | 0.001 | Adam | 일반 학습 단계 |
| 2025-02-15 | 12 | Bi-LSTM | 87.50 | 700 | 0.001 | Adam | 학습 안정화 중 |
| 2025-02-04 | 11 | Bi-LSTM | 87.20 | 600 | 0.001 | Adam | 전처리 파라미터 변경 |
| 2025-01-26 | 5 | CNN-BLSTM | 88.10 | 500 | 0.001 | Adam | 초기 테스트(baseline) |
분석 요약
정확도 분포: 86.2% ~ 92.3% (표에 기재된 17회 기준) → 전반적으로 안정적
Epoch 수와 정확도 간 직접 상관관계는 미약
CNN-BLSTM/GRU가 단기 예측 정확도에서 우수 경향
학습 설정 요약 (공통 파라미터 기준)
데이터 전처리: MinMaxScaler(피처별), 결측치 0건 기준 / 시계열 윈도우 time_step=30
모델 구조:Conv1D → MaxPool1D → (Bi-LSTM or LSTM/GRU) × 1~2 → Dropout → Dense(Output)
Optimizer: Adam (lr=0.001)
Loss: MSE (회귀 기준)
Metrics: MAE, sMAPE, (운영지표) Accuracy%
학습 스케줄:epochs=500~700, batch_size=64, EarlyStopping(patience=10)
검증 전략: Train/Val/Test = 70/15/15, 동일 Seed 고정, 동일 Split 재사용
재현성/아카이브:
artifacts/<algo>/<yyyymmdd_modelNo>/에 metrics.json, loss_curve.png, run_config.yaml, weights(sha256) 저장
README의 표는 metrics.json을 기준으로 주기적 업데이트
운영 반영 시, 가장 최신의 **안정판(CNN-BLSTM 계열)**을 기본 선택하되, 단기 급변 구간(프로모션/계절 전환)에는 GRU 보조 모델을 A/B 테스트 옵션으로 사용합니다.
MinMaxScaler를 사용하여 데이터를 스케일링하고 재고 값을 0과 1 사이로 정규화합니다.
Conv1D-BiLSTM 모델에 사용할 시간 단계별 데이터셋을 만듭니다.
4. 스크립트 실행
데이터를 훈련 세트와 테스트 세트로 분할합니다.
LSTM 모델에 맞게 입력 데이터를 변형합니다.
모델을 빌드하고 훈련시킵니다.
테스트 데이터에서 모델을 평가하고 성능을 시각화합니다.
오픈소스 라이브리 보안·라이선스 관리
개요
본 프로젝트는 Python 기반 딥러닝 프레임워크(TensorFlow, Keras, scikit-learn, NumPy, Pandas 등) 오픈소스를 활용하여 개발되었습니다.
내부망(On-premise) 환경에서도 오픈소스의 보안 취약점(CVE) 및 라이선스 의무 불이행은
법적 분쟁 및 서비스 중단으로 이어질 수 있으므로, 아래와 같은 관리체계를 적용합니다.
1. 위험 진술 (Risk Statement)
보안 위험: 외부 오픈소스 패키지에서 발견되는 취약점(CVE)에 의해
악성 코드 실행, 데이터 유출, 모델 무결성 훼손 가능성이 존재함.
법적 위험: Apache 2.0, MIT 등 라이선스 고지를 누락하거나 GPL 계열 라이선스를 오용할 경우, 소스 공개 요구·배포 제한·법적 분쟁 발생 위험.
운영 위험: SBOM(소프트웨어 구성 명세서) 미비, 버전 관리 부재로 인한 재현 불가, 보안 감사 대응 실패, 공급망 위협(Supply Chain Attack) 가능성.
2. 적용 범위 (Scope)
구분
범위
코드
학습/추론 파이프라인, 데이터 처리 스크립트
모델
Conv1D + BiLSTM 학습 결과(가중치, 체크포인트, 모델 파일)
데이터
원천 재고 시계열 데이터 및 전처리 산출물
환경
내부망 서버(학습/추론), 플랫폼 UI 및 배치 서버
문서
모델 카드, 매뉴얼, 배포 기록, 라이선스 고지 파일
3. 거버넌스 정책 (Governance Policy)
라이선스 허용 기준
구분
라이선스
허용 여부
주요 의무
✅
MIT, BSD-2/3, Apache-2.0
허용
저작권/라이선스 고지, Apache-2.0은 NOTICE 포함
⚠️
MPL-2.0, EPL-2.0, LGPL
조건부 허용
수정 파일 공개 범위 검토
⛔
GPL-2.0/3.0, AGPL-3.0
금지
내부 서비스라도 공개 의무 가능
⚠️
CC-BY, CC-BY-SA
조건부
출처 표기, 동일조건배포(ShareAlike) 확인
반입 절차
패키지/데이터/모델 반입 전 → 내부 승인 요청
SCA(Software Composition Analysis) 스캔 수행 (예: OSV-Scanner, Trivy)
결과 기록 및 “허용/조건부/거절” 결정
승인된 버전만 내부망 저장소(PyPI Mirror)에 등록
4. Library requirements.txt 버전 이력 관리
본 프로젝트는 의존성 재현성과 공급망 보안을 위해 requirements.in → requirements.txt(해시 포함) → SBOM 순으로
잠금(lock) + 이력(History) + 감사(Traceability) 를 관리합니다.
1) 디렉터리 구조
bash
1/configs/dependency/
2├─ base/
3│ ├─ requirements.in
4│ └─ requirements.txt # 해시 포함 (pip-compile 생성)5├─ dev/
6│ ├─ requirements-dev.in
7│ └─ requirements-dev.txt
8├─ constraints.txt # 팀 공통 제약(충돌 방지/상·하한)9└─ CHANGELOG_requirements.md # 의존성 변경 이력