BookmarkSubscribeRSS Feed

[SAS 프로그래밍] Mixture 분포 생성 실습

Started ‎06-18-2020 by
Modified ‎06-18-2020 by
Views 231

Mixture Distribution

 

1. Introduction

안녕하세요 박세훈입니다지난 시간 우리는 Mixture Distribution을 통해 새로운 분포를 만들어 Median값을 예측해 보았습니다.

 

 통계학과 관련한 일을 하시는 분들이라면 “분포에 대해 많은 얘기들을 들어오셨을 겁니다모집단은 정규분포를 가정한다어떤 샘플은 OO분포로 이루어져 있다등등 처럼요그런데 사실 실생활 데이터는 어느 한 가지의 분포로 정의될 수 없습니다세상엔 무수히 많은 변수들이 존재하기 때문이죠이번에는 Mixture 분포에 대한 실습을 진행해보도록 하겠습니다.

 

예를 들어 콜센터에서 통화에 응답하는데 필요한 시간을 모델링한다고 가정합니다통화의 종류에 따라 분포가 다를 것이기에 이를 전부 반영하고 싶습니다아래에선 3가지의 통화 종류로 구분하여 보았습니다.

 

2. Data

통화 유형별 모델링을 통해 각각의 분포를 가정합니다.

  1. 받기 쉬운 전화’, ‘Easy Calls’ 의 경우 N(4,1)의 정규분포를 따름모든 전화 중 50%

  2. ‘Specialized Calls’의 경우 N(8,2)의 정규 분포를 따름모든 전화 중 30%

  3. ‘Hard Calls’ 의 경우 N(10,3)의 정규 분포를 따음모든 전화 중 20%

만약 여러분이 이 콜센터를 모델링하고 싶다면각각의 분포와 비율을 적용하여 샘플링을 합니다.

<code1>

 

/* 혼합 분포 샘플링 */

%let N = 250;

data Calls(drop=i);

call streaminit(12345);

array prob [3_temporary_ (0.5 0.3 0.2); /* 비율 적용 */

do i = 1 to &N;

   type = rand("Table", of prob[*]);

   if type=1 then      Time = rand("Normal"41); /* easy calls */

   else if type=2 then Time = rand("Normal"82); /* specialized */

   else                Time = rand("Normal"103); /* hard */            

   output;

end;

run;

샘플링  250개의 데이터는 다음과 같습니다.

다운로드 - 2020-06-18T160711.324.png

 

3. Visualization

proc univariate data=Calls;

ods select Histogram;

histogram Time / vscale=proportion

         kernel(lower=0 c=SJPI); /* 히스토그램에 곡선 생성 */             

run;

 

다운로드 - 2020-06-18T160712.548.png

 

그래프를 보시면 세 개의 정규분포가 합쳐진 것을 확인할 수가 있습니다각각의 비율에 따라 분포 비율도 정해진 것이 보입니다.

 

4. Advacned

때떄로분포는 데이터에 따라 3가지가 아니라 수십가지가 될 수도 있습니다그럴 땐 IML 행렬을 이용하여 작성하면 손쉽게 샘플링을 할 수 있습니다.

<code3>

proc iml;

N = &N;

call randseed(12345);

prob = {0.5 0.3 0.2};/* 비율 지정*/

Type = j(N, 1); /* 벡터 할당*/

call randgen(Type, "Table", prob); /* 비율별로 type 1, 2, 3  랜덤생성 */

mean = {4 8 10};

sd   = {1 2  3};

Time = j(N,1); /* 벡터 할당*/

do i = 1 to ncol(prob);

   idx = loc(Type=i); /* 범주 식별*/

   if ncol(idx) > 0 then do;

      x = j(ncol(idx),1);

      call randgen(x, "Normal", mean[i], sd[i]);

      Time[idx] = x; /* 시간 데이터 생성*/

   end;

end;

 

5. Conclusion

이번 포스팅으로 알아 두면 좋은 것들은 다음과 같습니다.

  • 모든 범주는 RANDGEN 호출을 통해 전부 생성 가능하다.

  • LOC함수로 범주를 식별할 수 있다. (색인)

  • 생성하고자 하는 Time 값은 전부 독립적인 정규분포로부터 생성한다.

  • 위의 시뮬레이션 한 분포는 통화 유형별로 예상 호출 수를 처리하기 위한 모델링 준비 과정에 이용할 수 있다.

 

Version history
Last update:
‎06-18-2020 03:39 AM
Updated by:
Contributors

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

Article Labels
Article Tags