2011년 6월 13일 월요일

정규 분포를 이용한 시그마 수준 도출 API 구현

정규 분포를 이용한 시그마 수준 도출 API 구현
6 시그마

시그마
“시그마(σ:sigma)는 그리스 문자로서, 통계학에서 변동을 나타내는 여러 척도 중 하나인 표준편차를 나타낸다.”
확률을 정확하게 산출하려면 반드시 적절한 수의 샘플(시행 수)을 확보해야 한다. 왜냐하면 샘플 수가 적으면 결과가 우연에 의해 좌우될 가능성이 높아지기 때문이다. 야구를 생각하면 1년을 통해 3백 타수 1백안타의 타자와 30타수 10안타의 타자 가운데 어느 쪽을 신뢰할 수 있을까? 확률만으로 표현하면 둘 다 3할 3푼 3리여서 양자의 실력 차를 측정할 수 없기 때문에 프로야구에서는‘규정타석수(시합 수X 3.1)’라는 기준을 세워 연간 4백21타석(1997년 기준)을 채우지 못한 타자의 타율은 공식기록과 타율 순위에 넣지 않는다.

규정타석수의 배후에는 샘플 수를 고려한 격차를 표시하는 척도인‘표준편차’라는 개념이 있다. 시그마란 이 표준편차의 정도, 즉 분포의 확산 정도를 나타내는 단위이다. 표준편차(시그마)는 정규분포에서 산의 높이와 퍼지는 넓이를 측정하여 수치처리에서 우연을 배제한 것이다. 예를 들어 샘플 수가 적으면 높이가 매우 낮고 좌우로 퍼진 분포도가 되기 때문에 한눈에 알 수 있다. 그러므로 프로세스를 6시그마 수준으로 관리하려면 거기에 상당하는 양의 샘플 수를 모아야 한다.

시그마에서의 시그마 의미
시그마(σ:sigma)가 변동을 뜻하는 표준편차로 사용될 때도 있으나, 프로세스의 질을 나타내는 척도를 뜻하며 보통‘몇 시그마 수준’이라 함은 결함이 없는 작업을 수행할 수 있는 프로세스의 능력을 정량화 한 값이라고 말할 수 있다. 이는 업무 프로세스든 제조 프로세스든 프로세스의 품질 성능을 동일한 척도로 바꾸어 비교할 수 있는 기준을 제공해 준다.

6 시그마
6시그마란 확률적인 정규분포상에서 평균을 중심에 두고 관리 상.하한 안쪽으로 시그마가 여섯 개로 표현되는 상태. 아래의 그림 중 왼쪽의 그림은 3시그마인데 관리 한계 안으로 들어온 확률이 99.73%이다. 이는 10,000개의 제품을 생산했을 때 그 제품의 특성에 대해 관리한계 안으로 들어가는 제품이 9,973개라는 의미이다. 오른쪽의 그림은 6시그마를 나타낸 것인데, 6시그마가 되기 위해서는 그만큼 시그마 자체가 작아져야만 됨을 볼 수 있고, 이는 1,000,000개의 제품을 생산했을 시 999,966개의 제품이 관리한계내에 분포함을 보여준다.


정규분포
6시그마 품질의 통계적 배경은 정규분포이다. 정규분포는 평균을 중심으로 좌우대칭의 종 모양을 띄며 정규분포의 내부는 무수한 점의 집합으로, 그 점 하나하나가 확률을 나타내고 있으며 따라서 분포의 면적은 반드시 1이 된다. 분포의 정상 부분이 가장 높은 이유는 여기가 여러 가지 의미에서 평균이기 때문이다. 사실 평균치가 확률이 가장 높은 곳이라는 필연성은 없지만 우선 분포의 중심부가 정품 또는 정상적인 프로세스의 발생확률이 가장 높은 곳, 분포의 아래쪽 부분이 에러나 불량품이라고 생각하는게 보통이다.

그리고 시그마란 통계상 산포를 나타내는 단위인데 이것을 발생확률이라고 생각해도 좋다. 그렇게 보면 발생확률이 가장 높은 부분에서 불과 1σ범위에 전체의68.27%가 들어간다. 2σ까지 범위를 확대하면 이미 95.46%가 들어간다. 앞에서 분포의 내부는 하나하나가 발생 확률을 나타내는 무수한 점의 집합이라고 했다. 결국 2σ 범위로 표현되는 면적이 발생확률 그 자체가 된다. 이 기준으로 볼 때 6σ로까지 범위를 확대하면 전체의 99.9999998% 가 들어간다. 이 범위에서 벗어난 분포의 아래쪽이 0.002 PPM 이다. 그러나 실제 현실에서는 정적인 분포하에서 발생확률을 논하기가 힘들다. 그래서 1.5σ변동을 고려한 6σ를 생각하게 되었으며 이는 99.99966%가 분포 안으로 들어가게 되는 것이다.


왜 1.5σ변동을 고려해야 하는가?
6시그마 수준이라고 하면 프로세스의 평균이 규격의 중앙에 위치하는 경우, 규격의 중심인 목표 값으로부터 한쪽 규격한계까지의 거리가 정규 분포의 표준편차 값의 6배로 표현되는 경우를 의미한다. 그런데 아무리 정밀한 프로세스라 하더라도 프로세스의 평균이 목표 값에 고정되어 있기는 매우 어려우며 항상 변하게 된다. 이처럼 프로세스의 평균이 변하는데 그 변하는 정도가 경험적인 관찰에 의하면 일반적으로 ±1.5σ정도된다고 알려져 있다. 그러나 이러한 변동의 크기는 프로세스의 특성에 따라 ±1.5σ이상이거나 이하도 될 수 있기에 품질 담당자들은 자신의 프로세스의 변동에 대해 주의를 기울일 필요가 있고, 변동의 크기를 측정해 보는 것은 의미있는 일이 될 것이다

3 시그마와 6 시그마 품질수준의 비교
3시그마 품질 수준
6시그마 품질 수준
한 병원에서 연간 1만건의 틀린 처방약
한 병원에서 2년에 단 1회의 틀린 처방약
어느 나라에서 의사,간호사의 실수로 땅에
떨어지는 신생아가 연간 100명
어느 나라에서 의사,간호사의 실수로 땅에
떨어지는 신생아가 200년에 한 건 정도
어느 도시에서 안전하지 않은 식수를 매월
약 2시간 공급
어느 도시에서 안전하지 않은 식수를
10년동안 약 1분간 공급
어느 지역에서 매주 약 30분의 전화 불통
또는 TV전송 장애
어느 지역에서 매주 약 0.1초간의 전화 불통
또는 TV전송 장애
한 대학에서 연간 약 200통의 우편물 분실
한 대학에서 100년간 약 1통의 우편물 분실
김포 공항에서 연간 40건의 착륙오류 발생
김포 공항에서 연간 500년에 한 건 정도의
착륙오류 발생
어느 종합 병원에서 연간 500건의 잘못된
수술
어느 종합 병원에서 40년에 1건 정도의
잘못된 수술


3.8 시그마와 6 시그마 품질수준의 비교
3.8시그마 (98.92% 품질 수준)
6시그마 (99.99966%)품질 수준
시간당 20,000개 우편물 분실
시간당 7개 우편물 분실
매일 15분간 안전치 못한 수돗물의 공급
매 7달마다 1분 동안 안전치 못한 수돗물의 공급
매주 5000건의 잘못된 수술
매주 1.7건의 잘못된 수술
매일 미국의 주요 공항에서 2번의 비상착륙
매 5년마다 1번의 비상착륙
매해 200,000건의 잘못된 약 처방
매해 68건의 잘못된 약 처방
매달 7시간 동안의 정전
매 34년마다 한시간 동안의 정전


6 시그마에 의한 품질수준의 평가
표준편차
분산에 제곱근을 씌운 값으로 산포가 어느 정도 심한지를 측정하는 척도로 많이 쓰인다. 기호는 σ이고 표준편차 값이 클수록 제품의 산포가 심하여 낮은 수준의 품질을 의미하게 된다.

공정능력지수
표준편차 값은 품질특성값의 측정단위나 공정의 특성에 따라 값이 달라지게 되므로 표준화된 지수를 필요하게 되는데 그게 바로 공정능력지수이다. 어떤 공정의 품질특성값에 대해 규격한계가 규격상한의 값을 USL로, 규격하한의 값을 LSL로 주어진 경우,품질특성값이 규격상한보다 큰 제품이나 혹은 규격하한보다 작은 제품은 불량품으로 간주된다. 그리고 제품의 산포인 표준편차의 값이 작을 수록 LSL에서 USL까지의 거리인 (USL-LSL)은 표준편차의 여러배가 된다. (USL-LSL)값이 표준편차의 6배인 ‘6X표준편차’정도가될 때 공정은 보통수준이라 판단한다. 따라서 (USL-LSL)값을 (6X표준편차)값으로 나누어 본 값을 공정능력 지수라 하고 Cp로 표현하며, 공정의 표준편차 값이 작을수록 Cp값은 커지게 되고 공정의 능력은 우수하다고 판단하게 된다. Cp와는 달리 Cpk는 공정의 평균값이 목표값과 일치하지 않을 때 사용하는 공정능력지수이다.

공정능력지수와 시그마 수준
Cp=(USL-LSL)/(6X표준편차)=1이라고 할 때 USL-LSL=6X표준편차가 된다. 따라서 USL과 LSL까지의 길이는 ‘6X표준편차’이므로 6σ 와 같게 된다. 그리고 목표값은 USL과 LSL의 중간에 있으므로 목표값에서 USL까지의 길이는 (USL-LSL)의 절반이 된다. 따라서 목표값에서 USL까지의 거리는 표준편차인 σ의 3배가 되어 3σ가 된다. 즉, Cp값이 1인 경우 시그마 수준은 ‘3시그마’수준이 된다. 이를 관계식으로 시그마수준(Z)=3XCp가 된다. 또한 치우침을 고려한 공정능력지수 Cpk가 1인 경우 품질 수준을 시그마 수준으로 표현하면 3시그마+1.5시그마=4.5시그마 수준이 된다. .따라서 장기적으로 공정평균이 목표값에서 1.5σ정도 이동할 때 Cpk와 시그마 수준의 관계는 시그마 수준(Z)=3XCpk+1.5가 된다.그리고 Cp와 Cpk사이에는 다음과 같은 관계가 성립한다. Cpk=Cp-0.5

시그마 수준 도출 API
  • 아파치 “commons-math” 라이브러리 설치 : “http://commons.apache.org/math/” 위치에서 다운로드
  • Commons-math 라이브러리에 포함된 분포함수
    구현 객체
    명칭
    ExponentialDistributionImpl
    지수 분포
    (Exponential Distribution)
    지수 분포는 n 번째 특정 사건과 n+1 번째 사건이 일어나는 시간 간격에 대한 해석을
    GammaDistributionImpl
    감마 분포
    (Gamma Distribution)
    r번째 사건이 발생할 때까지 걸리는 시간에 대한 해석
    HypergeometricDistributionImpl
    초기하 분포
    (Hypergeometric Distribution)
    더해지는 항이 이전 항의 '유리함수배'
    NormalDistributionImpl
    정규 분포
    (Normal Distribution)
    통계적 측정에서 빈도가 가장 균일하게 분포되어 있는 경우
    PoissonDistributionImpl
    푸아송 분포
    (Poisson Distribution)
    발생확률이 작은 사건을 대량적으로 관찰할 , 발생횟수가 만드는 분포를
    WeibullDistributionImpl
    와이불 분포
    (Weibull Distribution)
    일부의 고장이 부품 전체의 파손 기능 정지 등을 야기하는 사상에 적용되는 확률 분포

    • 정규분포를 이용한 시그마 수준 계산 수식

    합격률을 이용한 시그마 수준 계산
    Sigma = NORMINV(probability, mean, standard deviation) + 1.5
    불량률을 이용한 시그마 수준 계산
    Sigma = NORMINV(1-probability, mean, standard deviation) + 1.5
    • 정규분포을 이용한 시그마 수준 계산 API 구현

    import org.apache.commons.math.MathException;
    import org.apache.commons.math.distribution.DistributionFactory;
    import org.apache.commons.math.distribution.NormalDistribution;
    public class NormalDist {
    private static final DistributionFactory DISTFACTORY = DistributionFactory
    .newInstance();
    public static Double getNorminv(double probability, double mean,
    double stdDev) throws MathException {
    NormalDistribution normalDistribution = DISTFACTORY
    .createNormalDistribution(mean, stdDev);
    double norminv = normalDistribution.inverseCumulativeProbability(probability);
    return norminv;
    }
    public static Double getNorMdist(double x, double mean, double stdDev)
    throws MathException {
    NormalDistribution normalDistribution = DISTFACTORY
    .createNormalDistribution(mean, stdDev);
    double normdist = normalDistribution.cumulativeProbability(x);
    return normdist;
    }
    public static void main(String[] args) {
    double mean = 0.0;
    double stdDev = 1.0;
    double probability = 0.5678;
    double constant = 1.5;
    try {
    double sigma = getNorminv(probability, mean, stdDev)+constant;
    System.out.println(sigma);
    double normdist = getNorMdist(sigma-constant, mean, stdDev);
    System.out.println(normdist);
    } catch (MathException e) {
    e.printStackTrace();
    }
    }
    }
    1.6707758747854429
    0.5678000002435202

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...