저울 오차 범위 계산 로직 개선 #5

Closed
opened 2025-06-09 15:58:27 +09:00 by kje97 · 1 comment
Owner
2.png

KakaoTalk_20250612_121115474_03.jpg

개선 방향

  • 오차 허용 범위 비율로 유동적 적용 할 수 있게 변경
  • 실측 데이터 기반으로 평균 오차율과 표준편차를 산출하고, 통계적 신뢰구간(예: 평균 ± 2σ, 95% 포함)을 활용해 오차 임계값을 설정

작업 내용

  • 구성품, 제품 리스트 다시 측정한 무게 DB반영

  • 무게 측정시 소수점 이하도 읽어오는지 확인 → 소수점 이하로는 안 읽어옴

  • 오차 계산 기능 추가 (커밋: d8ac2b984b)

Private Sub UpdateErrorRange()
    If mainForm.rdbWeightAuto.Checked = True Then
        ' 자동 모드: 오차 계수(k)로 오차 범위 산출
        Dim autoErrorRate As Double = 0.02 ' 예: 2% 오차
        weightErrorPlus = weightSum * autoErrorRate
        weightErrorMinus = weightSum * autoErrorRate

        'If lbNowWeight.Text >= weightSum - weightErrorMinus And
        '   lbNowWeight.Text <= weightSum + weightErrorPlus Then
        'End If

    Else
        ' 수동 모드: 평균, 표준편차 기반 오차 범위 산출
        If weights.Count >= 2 Then
            avg = weights.Average()
            stdDev = Math.Sqrt(weights.Select(Function(x) (x - avg) ^ 2).Average())
            errorRate = (k * stdDev) / avg
            weightErrorPlus = weightSum * errorRate
            weightErrorMinus = weightSum * errorRate

            '폼에 오차 범위 표시
            lbError.Text = "(오차: +" & weightErrorPlus.ToString() & ", -" & weightErrorMinus.ToString() & ")"
        End If
    End If
End Sub
  • 폼에 오차 범위 UI 표시 추가 (커밋: 05e1a08735)

  • 오차계산 로직 고정 방식으로 변경

Private Function weight_compare() As Boolean
        Dim nowWeight As Double = Double.Parse(lbNowWeight.Text)
        Dim autoErrorRate As Double = 0.02 ' 예: 2% 오차

        Dim weightError As Double = weightSum * autoErrorRate

        Dim upperBound As Double = weightSum + weightError
        Dim lowerBound As Double = weightSum - weightError


        Return (nowWeight >= lowerBound) AndAlso (nowWeight <= upperBound)
    End Function

참고

  • 오차 비율의 임계값(허용기준 설정) : 평균 오차 비율 + k × 표준편차 k=2면 95%(평균 ± 2σ → 전체 데이터의 약 95% 포함)
    image.png

  • 기호 의미 설명
    μ (뮤): 평균 오차 비율 여러 측정값의 오차 비율을 모두 더한 뒤 데이터 수로 나눈 값
    σ (시그마): 표준편차 오차 비율이 평균에서 얼마나 퍼져 있는지를 나타내는 통계값
    k (케이값): 신뢰 구간 결정 인자 허용 범위의 폭을 조절하는 값

  • Wikipedia: 68–95–99.7 rule (영문): https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule
    image.png

<img width="1437" alt="2.png" src="attachments/40175587-24ad-4a95-8c25-9a0f37acb0ad"> ![KakaoTalk_20250612_121115474_03.jpg](/attachments/b07e0031-bd40-435c-a1bd-5ab7c61fbd1e) ## **개선 방향** - 오차 허용 범위 비율로 유동적 적용 할 수 있게 변경 - 실측 데이터 기반으로 평균 오차율과 표준편차를 산출하고, 통계적 신뢰구간(예: 평균 ± 2σ, 95% 포함)을 활용해 오차 임계값을 설정 ## **작업 내용** - [x] 구성품, 제품 리스트 다시 측정한 무게 DB반영 - [x] 무게 측정시 소수점 이하도 읽어오는지 확인 → 소수점 이하로는 안 읽어옴 - [x] 오차 계산 기능 추가 (커밋: d8ac2b984b) ``` Private Sub UpdateErrorRange() If mainForm.rdbWeightAuto.Checked = True Then ' 자동 모드: 오차 계수(k)로 오차 범위 산출 Dim autoErrorRate As Double = 0.02 ' 예: 2% 오차 weightErrorPlus = weightSum * autoErrorRate weightErrorMinus = weightSum * autoErrorRate 'If lbNowWeight.Text >= weightSum - weightErrorMinus And ' lbNowWeight.Text <= weightSum + weightErrorPlus Then 'End If Else ' 수동 모드: 평균, 표준편차 기반 오차 범위 산출 If weights.Count >= 2 Then avg = weights.Average() stdDev = Math.Sqrt(weights.Select(Function(x) (x - avg) ^ 2).Average()) errorRate = (k * stdDev) / avg weightErrorPlus = weightSum * errorRate weightErrorMinus = weightSum * errorRate '폼에 오차 범위 표시 lbError.Text = "(오차: +" & weightErrorPlus.ToString() & ", -" & weightErrorMinus.ToString() & ")" End If End If End Sub ``` - [x] 폼에 오차 범위 UI 표시 추가 (커밋: 05e1a08735) - [x] 오차계산 로직 고정 방식으로 변경 ``` Private Function weight_compare() As Boolean Dim nowWeight As Double = Double.Parse(lbNowWeight.Text) Dim autoErrorRate As Double = 0.02 ' 예: 2% 오차 Dim weightError As Double = weightSum * autoErrorRate Dim upperBound As Double = weightSum + weightError Dim lowerBound As Double = weightSum - weightError Return (nowWeight >= lowerBound) AndAlso (nowWeight <= upperBound) End Function ``` ## **참고** - 오차 비율의 임계값(허용기준 설정) : 평균 오차 비율 + k × 표준편차 k=2면 95%(평균 ± 2σ → 전체 데이터의 약 95% 포함) ![image.png](/attachments/326f0a8d-a093-40f1-afbd-ff12ae0acddb) - 기호 의미 설명 μ (뮤): 평균 오차 비율 여러 측정값의 오차 비율을 모두 더한 뒤 데이터 수로 나눈 값 σ (시그마): 표준편차 오차 비율이 평균에서 얼마나 퍼져 있는지를 나타내는 통계값 k (케이값): 신뢰 구간 결정 인자 허용 범위의 폭을 조절하는 값 - Wikipedia: 68–95–99.7 rule (영문): [https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule](https://) ![image.png](/attachments/8a98ea1c-eb38-48fc-8c66-1a2efb4c6c27)
kje97 added the
enhancement
label 2025-06-09 15:59:00 +09:00
kje97 added reference feature/scale-tolerance-calculation 2025-06-10 16:55:47 +09:00
kje97 closed this issue 2025-06-12 14:37:49 +09:00
Author
Owner

비율 방식 적용 시, 기준 무게가 커질수록 오차 허용 범위가 비례해 커져 정확도 저하 발생.
예: 1585g 기준 시 ±31.7g(2%), 하지만 15850g으로 증가하면 ±317g으로 확대되어 실효성이 떨어짐.
따라서 고정 오차 방식(±0.02 기준)으로 유지하고, 기존 로직을 그대로 활용하기로 결정. 이슈 종료합니다.

비율 방식 적용 시, 기준 무게가 커질수록 오차 허용 범위가 비례해 커져 정확도 저하 발생. 예: 1585g 기준 시 ±31.7g(2%), 하지만 15850g으로 증가하면 ±317g으로 확대되어 실효성이 떨어짐. 따라서 고정 오차 방식(±0.02 기준)으로 유지하고, 기존 로직을 그대로 활용하기로 결정. 이슈 종료합니다.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jionmt-sw/shpmt-OrderPackingProcessor#5
No description provided.