Skip to Content

๋ถ„์„ ์‹คํ–‰

์—…๋กœ๋“œ๋œ ์‹œํ—˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด Weibull ๋ถ„์„๊ณผ ์‹ ๋ขฐ์„ฑ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Weibull ๋ถ„์„ ๊ฐœ์š”

Weibull ๋ถ„ํฌ๋Š” ๊ณ ์žฅ ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ˆ˜๋ช… ๋ถ„ํฌ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ํ•ต์‹ฌ ๋ชจ์ˆ˜๋กœ ๊ณ ์žฅ ํŒจํ„ด์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ์ˆ˜๊ธฐํ˜ธ์˜๋ฏธ
ํ˜•์ƒ ๋ชจ์ˆ˜ (Shape)ฮฒ๊ณ ์žฅ ํŒจํ„ด. ฮฒ < 1: ์ดˆ๊ธฐ ๊ณ ์žฅ, ฮฒ = 1: ์šฐ๋ฐœ ๊ณ ์žฅ, ฮฒ > 1: ๋งˆ๋ชจ ๊ณ ์žฅ
์ฒ™๋„ ๋ชจ์ˆ˜ (Scale)ฮท์ˆ˜๋ช… ํŠน์„ฑ. ์ „์ฒด์˜ 63.2%๊ฐ€ ๊ณ ์žฅ๋‚˜๋Š” ์‹œ์ 

ฮฒ ๊ฐ’์— ๋”ฐ๋ฅธ ๊ณ ์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ•ด์„:

  • ฮฒ < 1: ์ดˆ๊ธฐ ๊ณ ์žฅ (Infant Mortality). ์ œ์กฐ ๊ฒฐํ•จ, ์กฐ๋ฆฝ ๋ถˆ๋Ÿ‰์ด ์›์ธ
  • ฮฒ โ‰ˆ 1: ์šฐ๋ฐœ ๊ณ ์žฅ (Random Failure). ์™ธ๋ถ€ ์ถฉ๊ฒฉ, ๊ณผ๋ถ€ํ•˜ ๋“ฑ ๋ฌด์ž‘์œ„ ์›์ธ
  • ฮฒ > 1: ๋งˆ๋ชจ ๊ณ ์žฅ (Wear-out). ํ”ผ๋กœ, ๋ถ€์‹, ์ ˆ์—ฐ ์—ดํ™” ๋“ฑ ๊ฒฝ๋…„ ์—ดํ™”

MTTF (ํ‰๊ท  ๊ณ ์žฅ ์‹œ๊ฐ„)

Weibull ๋ถ„ํฌ์˜ MTTF๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

MTTF = ฮท ร— ฮ“(1 + 1/ฮฒ)

์—ฌ๊ธฐ์„œ ฮ“๋Š” ๊ฐ๋งˆ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. simulation/domain/ ๋ชจ๋“ˆ์ด ์ด ๊ณ„์‚ฐ์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹คํ–‰

CLI์—์„œ ์‹คํ–‰

simulation/runner.py๊ฐ€ ๋ถ„์„์˜ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.

cd ev-motor-reliability source venv/bin/activate # ๊ธฐ๋ณธ Weibull ๋ถ„์„ ์‹คํ–‰ python -m simulation.runner --input data/test_001.csv --analysis weibull # ๋ณต์ˆ˜ ํŒŒ์ผ ์ผ๊ด„ ๋ถ„์„ python -m simulation.runner --input data/*.csv --analysis weibull --batch # Monte Carlo ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํฌํ•จ python -m simulation.runner --input data/test_001.csv --analysis weibull --monte-carlo --iterations 10000

์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹คํ–‰

  1. ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋ถ„์„ํ•  ๋ฐ์ดํ„ฐ์…‹์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค
  2. ๋ถ„์„ ์„ค์ • ํŒจ๋„์—์„œ ๋ถ„์„ ์œ ํ˜•๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค
  3. ๋ถ„์„ ์‹œ์ž‘ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค
  4. ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ์ค„์ด ๋‚˜ํƒ€๋‚˜๋ฉฐ, ์™„๋ฃŒ ์‹œ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค

๋ถ„์„ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •

๊ธฐ๋ณธ ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
confidence_level0.90์‹ ๋ขฐ ๊ตฌ๊ฐ„ ์ˆ˜์ค€ (0.80 ~ 0.99)
estimation_methodmle๋ชจ์ˆ˜ ์ถ”์ •๋ฒ•. mle (์ตœ๋Œ€์šฐ๋„), rr (์ˆœ์œ„ํšŒ๊ท€)
failure_criteriatemperature๊ณ ์žฅ ํŒ์ • ๊ธฐ์ค€
threshold180.0๊ณ ์žฅ ํŒ์ • ์ž„๊ณ„๊ฐ’ (degC)

๊ณ ์žฅ ํŒ์ • ๊ธฐ์ค€

์‹œํ—˜ ๋ฐ์ดํ„ฐ์—์„œ ๊ณ ์žฅ ์‹œ์ ์„ ํŒ์ •ํ•˜๋Š” ๊ธฐ์ค€์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ค€์ž„๊ณ„๊ฐ’ (๊ธฐ๋ณธ)์„ค๋ช…
temperature180 degC๊ถŒ์„  ์˜จ๋„๊ฐ€ ์ ˆ์—ฐ ๋“ฑ๊ธ‰ ํ•œ๊ณ„ ์ดˆ๊ณผ
vibration๊ฐ€์†๋„ 4g๋ฒ ์–ด๋ง ์ง„๋™ ์ˆ˜์ค€ ์ดˆ๊ณผ
current_imbalance15%3์ƒ ์ „๋ฅ˜ ๋ถˆํ‰ํ˜•๋ฅ  ์ดˆ๊ณผ
efficiency_drop10%์ •๊ฒฉ ๋Œ€๋น„ ํšจ์œจ ์ €ํ•˜

๋ณต์ˆ˜ ๊ธฐ์ค€์„ ์กฐํ•ฉํ•˜์—ฌ OR/AND ์กฐ๊ฑด์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# config ์˜ˆ์‹œ (analysis ๋ชจ๋“ˆ์— ์ „๋‹ฌ) analysis_config = { "confidence_level": 0.90, "estimation_method": "mle", "failure_criteria": { "mode": "or", "conditions": [ {"type": "temperature", "threshold": 180.0}, {"type": "current_imbalance", "threshold": 0.15}, ], }, }

์ถ”์ • ๋ฐฉ๋ฒ• ๋น„๊ต

๋ฐฉ๋ฒ•์žฅ์ ๋‹จ์ ๊ถŒ์žฅ ์กฐ๊ฑด
MLE (์ตœ๋Œ€์šฐ๋„)๋Œ€ํ‘œ๋ณธ์—์„œ ์ •ํ™•, ์ค‘๋„ ์ ˆ๋‹จ ์ฒ˜๋ฆฌ ์šฐ์ˆ˜์†Œํ‘œ๋ณธ(n < 20)์—์„œ ํŽธํ–ฅ๋ฐ์ดํ„ฐ 30๊ฐœ ์ด์ƒ
RR (์ˆœ์œ„ํšŒ๊ท€)์†Œํ‘œ๋ณธ์—์„œ ์•ˆ์ •์ , ์ง๊ด€์ ์ค‘๋„ ์ ˆ๋‹จ ์ฒ˜๋ฆฌ ์ œํ•œ์ ๋ฐ์ดํ„ฐ 30๊ฐœ ๋ฏธ๋งŒ

๊ฒฐ๊ณผ ํ•ด์„

๋ถ„์„์ด ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ชจ์ˆ˜ ์ถ”์ • ๊ฒฐ๊ณผ

======================================== Weibull Analysis Result ======================================== Shape (ฮฒ): 2.45 [1.87, 3.21] (90% CI) Scale (ฮท): 8,520 h [7,100, 10,220] (90% CI) MTTF: 7,553 h B10 Life: 3,012 h Correlation: 0.987 ========================================
  • Shape (ฮฒ) = 2.45: ฮฒ > 1์ด๋ฏ€๋กœ ๋งˆ๋ชจ ๊ณ ์žฅ ํŒจํ„ด. ์‚ฌ์šฉ ์‹œ๊ฐ„์ด ๊ธธ์ˆ˜๋ก ๊ณ ์žฅ๋ฅ  ์ฆ๊ฐ€
  • Scale (ฮท) = 8,520 h: ์ „์ฒด ์‹œํ—˜ ์œ ๋‹›์˜ 63.2%๊ฐ€ 8,520์‹œ๊ฐ„ ์ด๋‚ด์— ๊ณ ์žฅ
  • MTTF = 7,553 h: ํ‰๊ท  ๊ณ ์žฅ ์‹œ๊ฐ„
  • B10 Life = 3,012 h: ์ „์ฒด์˜ 10%๊ฐ€ ๊ณ ์žฅ๋‚˜๋Š” ์‹œ์ . ๋ณด์ฆ ๊ธฐ๊ฐ„ ์„ค์ •์— ํ™œ์šฉ
  • Correlation = 0.987: Weibull ์ ํ•ฉ๋„. 0.95 ์ด์ƒ์ด๋ฉด ์–‘ํ˜ธ

B-Life ํ•ด์„

B-Life๋Š” ๋ˆ„์  ๊ณ ์žฅ ํ™•๋ฅ ์ด ํŠน์ • ํผ์„ผํŠธ์— ๋„๋‹ฌํ•˜๋Š” ์‹œ์ ์ž…๋‹ˆ๋‹ค.

์ง€ํ‘œ์˜๋ฏธํ™œ์šฉ
B11% ๊ณ ์žฅ ์‹œ์ ์•ˆ์ „ ๊ด€๋ จ ๋ถ€ํ’ˆ ๋ณด์ฆ
B1010% ๊ณ ์žฅ ์‹œ์ ์ผ๋ฐ˜ ๋ถ€ํ’ˆ ๋ณด์ฆ ๊ธฐ๊ฐ„
B5050% ๊ณ ์žฅ ์‹œ์ ์ค‘์œ„ ์ˆ˜๋ช… (โ‰  MTTF)

๊ณ ์žฅ ์˜ˆ์ธก ๋ชจ๋ธ

Weibull ๋ชจ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ฅํ›„ ๊ณ ์žฅ ํ™•๋ฅ ์„ ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค.

์‹ ๋ขฐ๋„ ํ•จ์ˆ˜

์‹œ๊ฐ t์—์„œ ์•„์ง ๊ณ ์žฅ๋‚˜์ง€ ์•Š์„ ํ™•๋ฅ :

R(t) = exp(-(t/ฮท)^ฮฒ)

๊ณ ์žฅ๋ฅ  ํ•จ์ˆ˜ (Hazard Function)

์‹œ๊ฐ t์—์„œ์˜ ์ˆœ๊ฐ„ ๊ณ ์žฅ๋ฅ :

h(t) = (ฮฒ/ฮท) ร— (t/ฮท)^(ฮฒ-1)

์ž”์—ฌ ์ˆ˜๋ช… ์˜ˆ์ธก

ํ˜„์žฌ ๊ฐ€๋™ ์‹œ๊ฐ„ tโ‚€์—์„œ ์ถ”๊ฐ€๋กœ ฮ”t๋งŒํผ ์ƒ์กดํ•  ์กฐ๊ฑด๋ถ€ ํ™•๋ฅ :

R(ฮ”t | tโ‚€) = R(tโ‚€ + ฮ”t) / R(tโ‚€)

์ด ๊ณ„์‚ฐ์€ analysis/domain/ ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฒฐ๊ณผ๋Š” JSON ๋ฐ CSV ํ˜•ํƒœ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์˜ˆ์ธก ๊ฒฐ๊ณผ ๋‚ด๋ณด๋‚ด๊ธฐ python -m simulation.runner --input data/test_001.csv --analysis weibull --export results/

results/ ๋””๋ ‰ํ† ๋ฆฌ์— ๋‹ค์Œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  • weibull_params.json โ€” ์ถ”์ •๋œ ๋ชจ์ˆ˜ ๋ฐ ์‹ ๋ขฐ ๊ตฌ๊ฐ„
  • reliability_table.csv โ€” ์‹œ๊ฐ„๋ณ„ ์‹ ๋ขฐ๋„/๊ณ ์žฅ๋ฅ  ํ…Œ์ด๋ธ”
  • prediction.csv โ€” ์ž”์—ฌ ์ˆ˜๋ช… ์˜ˆ์ธก ๊ฒฐ๊ณผ

๋‹ค์Œ ๋‹จ๊ณ„

๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ฐจํŠธ๋กœ ํ™•์ธํ•˜๋ ค๋ฉด ์‹œ๊ฐํ™”๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.