Main Content

rmoutliers

데이터에서 이상값을 감지하여 제거

설명

예제

B = rmoutliers(A)A의 데이터에서 이상값을 감지하여 제거합니다.

  • A가 행렬인 경우 rmoutliersA의 각 열에서 이상값을 개별적으로 감지하고 그 행 전체를 제거합니다.

  • A가 테이블 또는 타임테이블인 경우 rmoutliersA의 각 변수에서 이상값을 개별적으로 감지하고 그 행 전체를 제거합니다.

기본적으로, 이상값이란 중앙값에서 3 스케일링된 중앙값 절대 편차(MAD)를 초과해 떨어져 있는 값입니다.

예제

B = rmoutliers(A,method)는 이상값을 감지하는 방법을 지정합니다. 예를 들어, rmoutliers(A,"mean")은 이상값을 평균에서 3 표준편차를 초과해 떨어져 있는 A의 요소로 정의합니다.

B = rmoutliers(A,"percentiles",threshold)는 이상값을 threshold에 지정된 백분위수 밖에 있는 점으로 정의합니다. threshold 인수는 백분위수 하한 임계값 및 상한 임계값을 포함하는 요소를 2개 가진 행 벡터(예: [10 90])입니다.

예제

B = rmoutliers(A,movmethod,window)는 윈도우 길이가 window인 이동 윈도우 평균 또는 중앙값을 사용하여 국소 이상값을 감지합니다. 예를 들어, rmoutliers(A,"movmean",5)는 이상값을 5개 요소로 구성된 윈도우 내에서 국소 평균으로부터 3 국소 표준편차 넘게 벗어난 요소로 정의합니다.

예제

B = rmoutliers(___,dim)은 위에 열거된 구문 중 하나를 사용하여 이상값이 감지될 때 요소를 제거할 A의 차원을 지정합니다. 예를 들어 rmoutliers(A,2)는 행렬 A의 행 대신 열을 제거합니다.

예제

B = rmoutliers(___,Name,Value)는 하나 이상의 이름-값 인수를 사용하여 이상값을 감지하고 제거하는 추가 파라미터를 지정합니다. 예를 들어, rmoutliers(A,"SamplePoints",t)는 시간 벡터 t의 대응 요소를 기준으로 A의 이상값을 감지합니다.

예제

[B,TFrm] = rmoutliers(___)A에서 제거된 행 또는 열을 표시하는 논리형 벡터 TFrm도 반환합니다.

예제

[B,TFrm,TFoutlier] = rmoutliers(___)A에서 제거된 이상값의 위치를 나타내는 논리형 배열 TFoutlier도 반환합니다.

예제

[B,TFrm,TFoutlier,L,U,C] = rmoutliers(___)는 이상값 감지 방법이 사용한 하한 임계값 L과 상한 임계값 U, 그리고 중심값 C도 반환합니다.

예제

모두 축소

2개의 이상값이 들어 있는 벡터를 만들고 해당 이상값을 제거합니다.

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = rmoutliers(A)
B = 1×13

    57    59    60    59    58    57    58    61    62    60    62    58    57

평균값 감지 방법을 사용하여 데이터 타임테이블에서 잠재적 이상값을 식별하고 이상값을 제거한 다음 정리된 데이터를 시각화합니다.

데이터 타임테이블을 만들고 데이터를 시각화하여 잠재적 이상값을 감지합니다.

T = hours(1:15);
V = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
A = timetable(T',V');
plot(A.Time,A.Var1)

Figure contains an axes object. The axes object contains an object of type line.

데이터에서 이상값을 제거합니다. 여기서 이상값은 평균에서 3 표준편차를 초과해 떨어져 있는 점으로 정의됩니다.

B = rmoutliers(A,"mean")
B=14×1 timetable
    Time     Var1
    _____    ____

    1 hr      57 
    2 hr      59 
    3 hr      60 
    4 hr     100 
    5 hr      59 
    6 hr      58 
    7 hr      57 
    8 hr      58 
    10 hr     61 
    11 hr     62 
    12 hr     60 
    13 hr     62 
    14 hr     58 
    15 hr     57 

같은 그래프에서 원래 데이터와 이상값이 제거된 데이터를 플로팅합니다.

hold on
plot(B.Time,B.Var1,"o-")
legend("Original Data","Cleaned Data")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Data, Cleaned Data.

이동 중앙값을 사용하여 시간 벡터에 대응하는 사인파에서 국소 이상값을 감지하고 제거합니다.

국소 이상값이 포함된 데이터로 구성된 벡터를 만듭니다.

x = -2*pi:0.1:2*pi;
A = sin(x);
A(47) = 0;

A의 데이터에 대응하는 시간 벡터를 만듭니다.

t = datetime(2017,1,1,0,0,0) + hours(0:length(x)-1);

이상값을 슬라이딩 윈도우 내 국소 중앙값에서 3 국소 스케일링된 MAD를 초과하여 떨어져 있는 점으로 정의합니다. 윈도우 크기를 5시간으로 하여 t의 점을 기준으로 A에서 이상값의 위치를 찾아 제거합니다.

[B,TFrm] = rmoutliers(A,"movmedian",hours(5),"SamplePoints",t);

원래 데이터와 이상값이 제거된 데이터를 플로팅합니다.

plot(t,A)
hold on
plot(t(~TFrm),B,"o-")
legend("Original Data","Cleaned Data")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Data, Cleaned Data.

데이터 행렬에서 이상값을 제거하고 제거된 열과 이상값을 검토합니다.

두 개의 이상값이 포함된 행렬을 만듭니다.

A = magic(5);
A(4,4) = 200;
A(5,5) = 300;
A
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19   200     3
    11    18    25     2   300

제거할 차원을 2로 지정하여 이상값이 포함된 열을 제거합니다. 논리형 출력 벡터 TFrm을 반환하여 A의 어느 열이 제거되었는지 식별하고, 논리형 출력 배열 TFoutlier을 반환하여 A에서 이상값의 위치를 식별합니다.

[B,TFrm,TFoutlier] = rmoutliers(A,2)
B = 5×3

    17    24     1
    23     5     7
     4     6    13
    10    12    19
    11    18    25

TFrm = 1x5 logical array

   0   0   0   1   1

TFoutlier = 5x5 logical array

   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   1   0
   0   0   0   0   1

A에서 제거된 열의 값을 찾습니다.

rmCol = A(:,TFrm)
rmCol = 5×2

     8    15
    14    16
    20    22
   200     3
     2   300

A에서 이상값을 찾습니다.

rmVal = A(TFoutlier)
rmVal = 2×1

   200
   300

2개의 이상값이 들어 있는 벡터를 만들고 위치를 감지합니다.

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
detect = isoutlier(A)
detect = 1x15 logical array

   0   0   0   1   0   0   0   0   1   0   0   0   0   0   0

이상값을 제거합니다. 감지 방법을 사용하는 대신 isoutlier에서 감지한 이상값 위치를 제공합니다.

B = rmoutliers(A,"OutlierLocations",detect)
B = 1×13

    57    59    60    59    58    57    58    61    62    60    62    58    57

데이터로 구성된 벡터에서 이상값을 제거하고 정리된 데이터를 시각화합니다.

이상값이 포함된 데이터로 구성된 벡터를 만듭니다.

A = [60 59 49 49 58 100 61 57 48 58];

디폴트 감지 방법 "median"을 사용하여 이상값을 제거합니다.

[B,TFrm,TFoutlier,L,U,C] = rmoutliers(A);

원래 데이터, 이상값이 제거된 데이터, 감지 방법에 의해 결정된 임계값과 중심값을 플로팅합니다. 중심값은 데이터의 중앙값이며, 상한/하한 임계값은 중앙값으로부터 3 스케일링된 MAD만큼 위 그리고 아래에 있는 값입니다.

plot(A)
hold on
plot(find(~TFrm),B,"o-")
yline([L U C],":",["Lower Threshold","Upper Threshold","Center Value"])
legend("Original Data","Cleaned Data")

Figure contains an axes object. The axes object contains 5 objects of type line, constantline. These objects represent Original Data, Cleaned Data.

입력 인수

모두 축소

입력 데이터로, 벡터, 행렬, 테이블 또는 타임테이블로 지정됩니다.

  • A가 table형인 경우 그 변수는 double형 또는 single형이어야 하며, 아니면 DataVariables 인수를 사용하여 double형 또는 single형 변수를 명시적으로 나열할 수 있습니다. double 또는 single이 아닌 데이터형의 변수가 들어 있는 테이블을 사용하는 경우 변수를 지정하는 것이 유용합니다.

  • A가 timetable형인 경우 rmoutliers는 테이블 요소에 대해서만 동작합니다. 행 시간을 샘플 점으로 사용할 경우, 행 시간값은 고유해야 하며 오름차순으로 나열되어야 합니다.

데이터형: double | single | table | timetable

이상값 감지 방법으로, 다음 값 중 하나로 지정됩니다.

방법설명
"median"중앙값에서 3 스케일링된 중앙값 절대 편차(MAD)를 초과하여 떨어져 있는 요소로 이상값이 정의됩니다. 스케일링된 MAD는 c*median(abs(A-median(A)))로 정의됩니다. 여기서 c=-1/(sqrt(2)*erfcinv(3/2))입니다.
"mean"평균에서 3 표준편차를 초과하여 떨어져 있는 요소로 이상값이 정의됩니다. 이 방법은 "median"보다 빠르지만 덜 견고합니다.
"quartiles"상위 사분위수(75%)를 기준으로 1.5 사분위 범위보다 크거나 하위 사분위수(25%)를 기준으로 1.5 사분위 범위보다 작은 요소로 이상값이 정의됩니다. 이 방법은 A의 데이터가 정규분포되지 않은 경우에 유용합니다.
"grubbs"가설검정을 기반으로 이상값 1개를 매회 제거하는 이상값에 대한 그럽스 검정(Grubbs test)을 사용하여 이상값을 감지합니다. 이 방법에서는 A의 데이터가 정규분포된 것으로 가정합니다.
"gesd"이상값에 대해 일반화된 극단적 스튜던트화 이탈(Extreme Studentized Deviate) 검정을 사용하여 이상값을 감지합니다. 이 반복법은 "grubbs"와 유사하지만 서로를 감추는 여러 이상값이 있는 경우 더 효율적일 수 있습니다.

백분위수 임계값으로, 요소가 구간 [0, 100]에 있는 요소를 2개 가진 행 벡터로 지정됩니다. 첫 번째 요소는 백분위수 하한 임계값을 나타내고 두 번째 요소는 백분위수 상한 임계값을 나타냅니다. threshold의 첫 번째 요소는 두 번째 요소보다 작아야 합니다.

예를 들어, 임계값 [10 90]은 이상값을 10번째 백분위수 아래에 있는 점과 90번째 백분위수 위에 있는 점으로 정의합니다.

이상값 감지에 사용하는 이동 방법으로, 다음 값 중 하나로 지정됩니다.

방법설명
"movmedian"이상값이 window로 지정된 윈도우 길이에 걸쳐 국소 중앙값에서 3 국소 스케일링된 MAD를 초과하여 떨어져 있는 요소로 정의됩니다. 이 방법은 햄펄 필터라고도 합니다.
"movmean"이상값이 window로 지정된 윈도우 길이에 걸쳐 국소 평균에서 3 국소 표준편차를 초과하여 떨어져 있는 요소로 정의됩니다.

윈도우 길이로, 양의 정수 스칼라, 양의 정수로 구성된 요소를 2개 가진 벡터, 양의 duration형 스칼라 또는 양의 duration형으로 구성된 요소를 2개 가진 벡터로 지정됩니다.

window가 양의 정수 스칼라인 경우 윈도우는 현재 요소의 인근 지점에 중심을 두며, window-1개의 인접 요소를 가집니다. window가 짝수이면 윈도우의 중심은 현재 요소 및 이전 요소가 됩니다.

window가 양의 정수로 구성된 요소를 2개 가진 벡터 [b f]인 경우 윈도우에는 현재 요소, 현재 요소의 역방향으로 b개 요소, 그리고 현재 요소의 정방향으로 f개 요소가 들어 있습니다.

A가 timetable형이거나 SamplePointsdatetime형 또는 duration형 벡터로 지정된 경우 windowduration형이어야 하며, 윈도우는 샘플 점을 기준으로 하여 계산됩니다.

제거할 차원으로, 1 또는 2로 지정됩니다. 기본적으로 rmoutliers는 감지되는 이상값이 있는 각 행을 제거합니다. 감지된 이상값이 포함된 각 행렬 열이나 테이블 변수를 제거하려면 차원을 2로 지정합니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: rmoutliers(A,ThresholdFactor=4)

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: rmoutliers(A,"ThresholdFactor",4)

데이터 옵션

모두 축소

샘플 점으로, 샘플 점 값으로 구성된 벡터로 지정되거나 입력 데이터가 테이블인 경우 다음 표에 나와 있는 옵션 중 하나로 지정됩니다. 샘플 점은 데이터의 x축 위치를 나타내며, 이 샘플 점은 정렬되고 고유한 요소를 가져야 합니다. 샘플 점은 균일하게 샘플링할 필요가 없습니다. 벡터 [1 2 3 ...]이 디폴트 값입니다.

입력 데이터가 테이블이면 다음 옵션 중 하나를 사용하여 샘플 점을 테이블 변수로 지정할 수 있습니다.

테이블 입력값에 대한 옵션설명예제
변수 이름

단일 테이블 변수 이름을 지정하는 문자형 벡터 또는 string형 스칼라

'Var1'

"Var1"

스칼라 변수 인덱스

스칼라 테이블 변수 인덱스

3

논리형 벡터

각각의 요소가 테이블 변수에 해당하는 논리형 벡터로, 여기서 true는 해당하는 변수를 샘플 점으로 지정하고 다른 모든 요소는 false로 지정함

[true false false]

함수 핸들

테이블 변수를 입력값으로 받고 논리형 스칼라를 반환하는 함수 핸들로, 하나의 테이블 변수에 대해서만 true여야 함

@isnumeric

vartype 첨자

vartype 함수로 생성된 테이블 첨자로 하나의 변수에 대한 첨자만 반환함

vartype('numeric')

참고

입력 데이터가 timetable형인 경우에는 이 이름-값 인수가 지원되지 않습니다. 타임테이블은 행 시간값으로 구성된 벡터를 샘플 점으로 사용합니다. 다른 샘플 점을 사용하려면 행 시간값이 원하는 샘플 점을 포함하도록 타임테이블을 편집해야 합니다.

이동 윈도우는 샘플 점을 기준으로 정의됩니다. 예를 들어, t가 입력 데이터에 해당하는 시간 벡터인 경우 rmoutliers(rand(1,10),"movmean",3,"SamplePoints",t)에는 t(i)-1.5 ~ t(i)+1.5 범위의 시간 구간을 나타내는 윈도우가 있습니다.

샘플 점 벡터의 데이터형이 datetime형 또는 duration형인 경우 이동 윈도우 길이는 duration형이어야 합니다.

예: rmoutliers(A,"SamplePoints",0:0.1:10)

예: rmoutliers(T,"SamplePoints","Var1")

데이터형: single | double | datetime | duration

연산을 수행할 테이블 변수로, 다음 표에 있는 옵션 중 하나로 지정됩니다. DataVariables 값은 입력 테이블에서 이상값이 있는지 조사할 변수를 나타냅니다. 지정된 변수와 연결된 데이터형은 double 또는 single이어야 합니다.

테이블에서 DataVariables로 지정되지 않은 다른 변수는 이상값이 있는지 조사되지 않은 채 출력값으로 전달됩니다.

A의 행에 대해 동작할 때, rmoutliers는 지정된 변수에 해당하는 열에 이상값을 갖는 행을 모두 제거합니다. A의 열에 대해 동작할 때, rmoutliers는 테이블에서 지정된 변수를 제거합니다.

옵션설명예제
변수 이름

단일 테이블 변수 이름을 지정하는 문자형 벡터 또는 string형 스칼라

'Var1'

"Var1"

변수 이름으로 구성된 벡터

각 요소가 테이블 변수 이름인, 문자형 벡터 또는 string형 배열로 구성된 셀형 배열

{'Var1' 'Var2'}

["Var1" "Var2"]

스칼라 또는 변수 인덱스로 구성된 벡터

스칼라 또는 테이블 변수 인덱스로 구성된 벡터

1

[1 3 5]

논리형 벡터

각각의 요소가 테이블 변수에 해당하는 논리형 벡터. 여기서 true는 해당하는 변수를 포함하고 false는 해당하는 변수를 제외합니다.

[true false true]

함수 핸들

테이블 변수를 입력값으로 받고 논리형 스칼라를 반환하는 함수 핸들

@isnumeric

vartype 첨자

vartype 함수로 생성된 테이블 첨자

vartype("numeric")

예: rmoutliers(T,"DataVariables",["Var1" "Var2" "Var4"])

이상값 감지 옵션

모두 축소

감지 임계값 인자로, 음이 아닌 스칼라로 지정됩니다.

"median""movmedian" 방법의 경우 스케일링된 MAD에 대해 지정된 수(디폴트 값 3)를 감지 임계값 인자가 대체합니다.

"mean""movmean" 방법의 경우 평균으로부터의 표준편차에 대해 지정된 수(디폴트 값 3)를 감지 임계값 인자가 대체합니다.

"grubbs""gesd" 방법의 경우 감지 임계값 인자는 0 ~ 1 범위의 스칼라입니다. 값이 0에 가까우면 이상값 수가 적어지고, 값이 1에 가까우면 이상값 수가 많아집니다. 디폴트 감지 임계값 인자는 0.05입니다.

"quartiles" 방법의 경우 사분위 범위에 대해 지정된 수(디폴트 값 1.5)를 감지 임계값 인자가 대체합니다.

이 이름-값 쌍은 지정된 방법이 "percentiles"인 경우에는 지원되지 않습니다.

알려진 이상값 표시자로, A와 크기가 같은 논리형 벡터 또는 행렬로 지정됩니다. 알려진 이상값 표시자 요소는 A의 대응 위치에 이상값이 있음을 나타내는 숫자형 또는 논리값 1(true)이거나 이상값이 아님을 나타내는 0(false)일 수 있습니다. OutlierLocations를 지정할 경우 rmoutliers는 이상값 감지 방법을 사용하지 않습니다. 대신 알려진 이상값 표시자의 요소를 사용하여 이상값을 정의합니다. 출력값 TFoutlier는 동일한 논리형 벡터 또는 행렬을 포함합니다.

method를 지정하는 경우 OutlierLocations 이름-값 인수를 지정할 수 없습니다.

데이터형: logical

GESD가 감지한 최대 이상값으로, 양의 정수 스칼라로 지정됩니다. MaxNumOutliers 값은 "gesd" 방법이 감지하는 최대 이상값 수를 지정합니다. 예를 들어, rmoutliers(A,"gesd","MaxNumOutliers",5)는 5개 이하의 이상값을 감지합니다.

MaxNumOutliers의 디폴트 값은 A에 있는 요소 개수의 10%에 가장 가까운 정수입니다. 최대 이상값 수를 큰 수로 설정하면 모든 이상값이 감지되게 가능성을 높일 수 있지만, 계산 효율성은 떨어집니다.

"gesd" 방법은 이상값이 아닌 입력 데이터가 근사 정규분포에서 추출된 것으로 가정합니다. 데이터가 이러한 방식으로 추출되지 않은 경우 감지되는 이상값의 개수는 MaxNumOutliers 값을 초과할 수 있습니다.

제거를 위해 필요한 최소 이상값으로, 양의 정수 스칼라로 지정됩니다. MinNumOutliers 값은 행 또는 열을 제거하는 데 필요한 최소 이상값 개수를 지정합니다. 예를 들어, rmoutliers(A,"MinNumOutliers",3)은 해당 행에서 이상값이 3개 이상 발견된 경우 행렬 A에서 행을 제거합니다.

출력 인수

모두 축소

이상값이 제거된 데이터로, 벡터, 행렬, table형 또는 timetable형으로 반환됩니다. B의 크기는 제거된 행 또는 열의 개수에 따라 달라집니다.

제거된 데이터 표시자로, 논리형 벡터로 반환됩니다. 값이 1(true)인 요소는 A에서 제거된 행 또는 열에 해당합니다. 값이 0(false)인 요소는 변경이 없는 행 또는 열에 해당합니다. TFrm의 방향과 크기는 A 및 연산 차원에 따라 다릅니다.

데이터형: logical

이상값 표시자로, 논리형 벡터 또는 행렬로 반환됩니다. 값이 1(true)인 요소는 A에서 이상값의 위치에 해당합니다. 값이 0(false)인 요소는 이상값이 아닌 값에 해당합니다.

TFoutlierA와 크기가 동일합니다.

데이터형: logical

이상값 감지 방법이 사용하는 하한 임계값으로, 스칼라, 벡터, 행렬, 테이블 또는 타임테이블로 반환됩니다. 예를 들어, 디폴트 이상값 감지 방법의 하한 임계값은 입력 데이터의 중앙값 아래로 3 스케일링된 MAD입니다.

이상값 감지에 method가 사용되면 길이가 1인 연산 차원을 제외한 모든 차원에서 LA와 크기가 같습니다. movmethod가 사용되면 LA와 크기가 같습니다.

이상값 감지 방법이 사용하는 상한 임계값으로, 스칼라, 벡터, 행렬, 테이블 또는 타임테이블로 반환됩니다. 예를 들어, 디폴트 이상값 감지 방법의 상한 임계값은 입력 데이터의 중앙값 위로 3 스케일링된 MAD입니다.

이상값 감지에 method가 사용되면 길이가 1인 연산 차원을 제외한 모든 차원에서 UA와 크기가 같습니다. movmethod가 사용되면 UA와 크기가 같습니다.

이상값 감지 방법이 사용하는 중심값으로, 스칼라, 벡터, 행렬, 테이블 또는 타임테이블로 반환됩니다. 예를 들어, 디폴트 이상값 감지 방법의 중심값은 입력 데이터의 중앙값입니다.

이상값 감지에 method가 사용되면 길이가 1인 연산 차원을 제외한 모든 차원에서 CA와 크기가 같습니다. movmethod가 사용되면 CA와 크기가 같습니다.

확장 기능

버전 내역

R2018b에 개발됨

모두 확장