시각화
분석 결과를 차트로 표현하고 내보내는 방법을 설명합니다. 시각화는 matplotlib 기반으로 생성되며, 웹 대시보드와 CLI 모두에서 사용할 수 있습니다.
차트 종류
| 차트 | 용도 | 모듈 |
|---|---|---|
| Weibull 확률 플롯 | 분포 적합도 확인 | analysis/domain/ |
| 고장률 곡선 (욕조 곡선) | 수명 주기별 고장 패턴 | analysis/domain/ |
| 신뢰도 함수 그래프 | 시간별 생존 확률 | analysis/domain/ |
| CDF (누적 고장 분포) | 시간별 누적 고장 확률 | analysis/domain/ |
| 시계열 플롯 | 원시 데이터 트렌드 확인 | simulation/domain/ |
| 히트맵 | 온도/전류 분포 시각화 | simulation/domain/ |
Weibull 확률 플롯
Weibull 확률지(Probability Paper) 위에 고장 데이터와 적합선을 표시합니다. X축은 시간(log), Y축은 누적 고장 확률(이중 로그 변환)입니다.
해석 방법
- 데이터 포인트가 직선에 가까울수록 Weibull 분포 적합도가 높음
- 직선의 기울기가 형상 모수 β에 해당
- 곡선 형태를 보이면 혼합 고장 모드(Mixed Mode)를 의심
CLI에서 생성
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--plot probability \
--output results/weibull_probability.png
옵션
| 옵션 | 기본값 | 설명 |
|---|---|---|
--confidence-bounds | true | 신뢰 구간 밴드 표시 |
--point-style | scatter | 데이터 포인트 스타일 (scatter, step) |
--dpi | 150 | 이미지 해상도 |
--figsize | 10,7 | 차트 크기 (인치) |
고장률 곡선 (욕조 곡선)
전체 수명 주기에 걸친 고장률 변화를 보여주는 곡선입니다. Weibull 해저드 함수 h(t) = (β/η) × (t/η)^(β-1)을 시각화합니다.
세 구간의 의미
| 구간 | β 범위 | 특징 | 대표 원인 |
|---|---|---|---|
| 초기 고장기 | β < 1 | 고장률 감소 | 제조 결함, 조립 불량 |
| 우발 고장기 | β ≈ 1 | 고장률 일정 | 외부 충격, 과부하 |
| 마모 고장기 | β > 1 | 고장률 증가 | 절연 열화, 베어링 마모 |
실제 모터 시스템은 복수의 고장 메커니즘이 중첩되므로, 각 메커니즘을 분리하여 개별 Weibull 곡선으로 표현할 수 있습니다.
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--plot hazard \
--output results/bathtub_curve.png
신뢰도 함수 그래프
시간에 따른 신뢰도 R(t)를 보여줍니다. R(t) = exp(-(t/η)^β) 곡선으로, 시간이 지남에 따라 1에서 0으로 감소합니다.
주요 읽기 포인트
- R(t) = 0.90 시점: B10 수명. 전체의 10%가 고장
- R(t) = 0.50 시점: B50 수명 (중위 수명)
- 곡선의 기울기: 급격할수록 고장이 특정 시점에 집중
복수 데이터셋 비교
서로 다른 시험 조건의 신뢰도 곡선을 하나의 차트에 겹쳐 비교할 수 있습니다.
python -m simulation.runner \
--input data/test_normal.csv data/test_accelerated.csv \
--analysis weibull \
--plot reliability \
--labels "상온 시험" "가속 시험" \
--output results/reliability_comparison.png
신뢰 구간 표시
추정 모수의 불확실성을 반영한 신뢰 구간 밴드를 함께 표시합니다. 기본 신뢰 수준은 90%이며, --confidence-level 옵션으로 변경할 수 있습니다.
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--plot reliability \
--confidence-level 0.95 \
--output results/reliability_with_ci.png
시계열 플롯
원시 측정 데이터의 시간 변화를 확인합니다. 전처리 전후 비교, 이상치 식별에 활용됩니다.
python -m simulation.runner \
--input data/test_001.csv \
--plot timeseries \
--columns speed,torque,temp_winding \
--output results/timeseries.png
여러 물리량을 동일 시간축에 서브플롯으로 배치하여, 상관관계를 시각적으로 확인할 수 있습니다.
결과 내보내기
이미지 형식
| 형식 | 옵션 | 용도 |
|---|---|---|
| PNG | --format png | 웹, 프레젠테이션 (기본값) |
--format pdf | 보고서 삽입 (벡터) | |
| SVG | --format svg | 웹 (확대 가능) |
# PDF로 내보내기
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--plot all \
--format pdf \
--output results/
# 전체 차트 일괄 생성
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--plot all \
--output results/
--plot all 옵션은 Weibull 확률 플롯, 고장률 곡선, 신뢰도 함수, CDF를 일괄 생성합니다.
보고서 생성
Jinja2 템플릿 기반으로 분석 결과를 포함한 HTML 보고서를 자동 생성할 수 있습니다.
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--report html \
--output results/report.html
보고서에는 모수 추정 결과, 모든 차트, 데이터 요약 통계가 포함됩니다. 템플릿은 templates/ 디렉토리에서 커스터마이징할 수 있습니다.
데이터 내보내기
차트와 함께 수치 데이터도 CSV/JSON으로 내보낼 수 있습니다.
# CSV로 신뢰도 테이블 내보내기
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--export csv \
--output results/reliability_table.csv
내보내기 데이터에는 시간, 신뢰도 R(t), 누적 고장 확률 F(t), 고장률 h(t) 컬럼이 포함됩니다.