이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

filloutliers

데이터에서 이상값 감지하고 바꾸기

구문

B = filloutliers(A,fillmethod)
B = filloutliers(A,fillmethod,findmethod)
B = filloutliers(A,fillmethod,movmethod,window)
B = filloutliers(___,dim)
B = filloutliers(___,Name,Value)
[B,TF,L,U,C] = filloutliers(___)

설명

예제

B = filloutliers(A,fillmethod)A에서 이상값을 찾아 fillmethod에 따라 바꿉니다. 예를 들어, filloutliers(A,'previous')는 이상값을 이상값이 아닌 이전 요소로 바꿉니다. 기본적으로, 이상값이란 중앙값에서 스케일링된 3 중앙값 절대 편차(MAD)를 초과하여 떨어져 있는 값입니다. A가 행렬 또는 table형인 경우 filloutliers는 열마다 별개로 동작합니다. A가 다차원 배열인 경우 filloutliers는 크기가 1이 아닌 첫 번째 차원에 대해 연산을 수행합니다.

예제

B = filloutliers(A,fillmethod,findmethod)는 이상값을 감지하는 메서드를 지정합니다. 예를 들어, filloutliers(A,'previous','mean')은 이상값을 평균에서 3 표준편차를 초과해 떨어져 있는 A의 요소로 정의합니다.

예제

B = filloutliers(A,fillmethod,movmethod,window)window로 정의된 윈도우 길이에 따라 국소 이상값을 감지하는 이동 메서드를 지정합니다. 예를 들어, filloutliers(A,'previous','movmean',5)는 이상값을 5개 요소로 구성된 윈도우 내에서 국소 평균으로부터 3 국소 표준편차 넘게 벗어난 요소로 식별합니다.

예제

B = filloutliers(___,dim)은 위에 열거된 구문을 사용하여, A의 차원 dim에 대해 연산을 수행합니다. 예를 들어, filloutliers(A,'linear',2)는 행렬 A의 각 행에 대해 연산을 수행합니다.

예제

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

예제

[B,TF,L,U,C] = filloutliers(___)는 또한 감지 메서드로 계산된 이상값과 임계값의 위치에 대한 정보를 반환합니다. TFA의 이상값 위치를 나타내는 논리형 배열입니다. L, U, C 인수는 이상값 감지 메서드에 사용되는 하한 임계값과 상한 임계값, 그리고 중심값을 나타냅니다.

예제

모두 축소

이상값이 포함된 데이터의 벡터를 만들고 선형 보간을 사용하여 이상값을 바꿉니다. 원래 데이터와 채워진 데이터를 플로팅합니다.

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'linear');
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated Data')

이상값이 포함된 벡터를 만들고 이상값을 평균에서 3 표준편차 범위 밖으로 벗어난 점으로 정의합니다. 이상값을 가장 가까운 이상값이 아닌 요소로 바꾸고 원래 데이터와 보간된 데이터를 플로팅합니다.

A = [57 59 60 100 59 58 57 58 300 61 62 60 62 58 57];
B = filloutliers(A,'nearest','mean');
plot(1:15,A,1:15,B,'o')
legend('Original Data','Interpolated 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에서 이상값의 위치를 찾습니다. 메서드 'clip'을 사용하여 계산된 임계값으로 이상값을 채우고 원래 데이터와 채워진 데이터를 플로팅합니다.

[B,TF,U,L,C] = filloutliers(A,'clip','movmedian',hours(5),'SamplePoints',t);
plot(t,A,t,B,'o')
legend('Original Data','Filled Data')

이상값을 교체한 임계값을 표시합니다.

L(TF)
ans = -0.8779

행렬의 각 행에 대해 이상값을 채웁니다.

주대각선상에 이상값이 있는 데이터 행렬을 만듭니다.

A = randn(5,5) + diag(1000*ones(1,5))
A = 5×5
103 ×

    1.0005   -0.0013   -0.0013   -0.0002    0.0007
    0.0018    0.9996    0.0030   -0.0001   -0.0012
   -0.0023    0.0003    1.0007    0.0015    0.0007
    0.0009    0.0036   -0.0001    1.0014    0.0016
    0.0003    0.0028    0.0007    0.0014    1.0005

각 행의 데이터를 기준으로 이상값을 0으로 채우고 새 값을 표시합니다.

[B,TF,lower,upper,center] = filloutliers(A,0,2);
B
B = 5×5

         0   -1.3077   -1.3499   -0.2050    0.6715
    1.8339         0    3.0349   -0.1241   -1.2075
   -2.2588    0.3426         0    1.4897    0.7172
    0.8622    3.5784   -0.0631         0    1.6302
    0.3188    2.7694    0.7147    1.4172         0

TF를 인덱스 벡터로 사용하여 감지된 이상값과 거기에 채워진 값에 직접 액세스할 수 있습니다.

[A(TF) B(TF)]
ans = 5×2
103 ×

    1.0005         0
    0.9996         0
    1.0007         0
    1.0014         0
    1.0005         0

데이터의 벡터에서 이상값을 찾아 'clip' 메서드를 사용하여 바꿉니다. 원래 데이터, 채워진 데이터, 감지 메서드에 의해 결정된 임계값, 중심값을 플로팅합니다. 'clip'은 이상값을 상한 임계값으로 바꿉니다.

x = 1:10;
A = [60 59 49 49 58 100 61 57 48 58];
[B,TF,lower,upper,center] = filloutliers(A,'clip');
plot(x,A,x,B,'o',x,lower*ones(1,10),x,upper*ones(1,10),x,center*ones(1,10))
legend('Original Data','Filled Data','Lower Threshold','Upper Threshold','Center Value')

입력 인수

모두 축소

입력 데이터로, 벡터, 행렬, 다차원 배열, table형 또는 timetable형으로 지정됩니다.

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

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

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

이상값을 바꾸기 위한 채우기 메서드로, 숫자형 스칼라나 다음 중 하나로 지정됩니다.

채우기 메서드설명
숫자형 스칼라지정된 스칼라 값으로 채웁니다.
'center'findmethod로 결정된 중심값으로 채웁니다.
'clip'findmethod로 결정된 하한 임계값보다 작은 요소에 대해 하한 임계값으로 채웁니다. findmethod로 결정된 상한 임계값보다 큰 요소에 대해 상한 임계값으로 채웁니다.
'previous'이상값이 아닌 이전 값으로 채웁니다.
'next'이상값이 아닌 다음 값으로 채웁니다.
'nearest'이상값이 아닌 가장 가까운 값으로 채웁니다.
'linear'이상값이 아닌 인접 값의 선형 보간을 사용하여 채웁니다.
'spline'구간별 3차 스플라인 보간을 사용하여 채웁니다.
'pchip'형태 보존 구간별 3차 스플라인 보간을 사용하여 채웁니다.

데이터형: double | single | char

이상값 감지 메서드로, 다음 중 하나로 지정됩니다.

메서드설명
'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'와 유사하지만, 서로를 감추는 여러 이상값이 있는 경우 더 효율적일 수 있습니다.

이상값 감지 이동 메서드로, 다음 중 하나로 지정됩니다.

메서드설명
'movmedian'이상값이 window로 지정된 윈도우 길이에 걸쳐 국소 중앙값에서 국소 스케일링된 3 MAD를 초과하여 떨어져 있는 요소로 정의됩니다.
'movmean'이상값이 window로 지정된 윈도우 길이에 걸쳐 국소 평균에서 3 국소 표준편차를 초과하여 떨어져 있는 요소로 정의됩니다.

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

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

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

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

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

함수 동작이 수행될 차원으로, 양의 정수 스칼라로 지정됩니다. 값이 지정되지 않은 경우 디폴트 값은 크기가 1이 아닌 첫 번째 배열 차원이 됩니다.

행렬 A가 있다고 가정합니다.

filloutliers(A,fillmethod,1)은 각 열의 데이터에 따라 이상값을 채웁니다.

filloutliers(A,fillmethod,2)는 각 행의 데이터에 따라 이상값을 채웁니다.

A가 table형 또는 timetable형이면 dim이 지원되지 않습니다. filloutliers는 각 테이블 변수나 타임테이블 변수를 따라 동작합니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: filloutliers(A,'center','mean','ThresholdFactor',4)

감지 임계값 인자로, 'ThresholdFactor'와 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다.

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

메서드 'movmedian''movmean'의 경우 감지 임계값 인자가 평균에서 벗어난 스케일링된 MAD 또는 표준편차의 개수를 대체합니다. 디폴트 값은 3입니다.

'quartile' 메서드의 경우 감지 임계값 인자가 사분위 범위의 개수를 대체합니다. 디폴트 값은 1.5입니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

샘플 점으로, 'SamplePoints'와 함께 벡터가 쉼표로 구분되어 지정됩니다. A에서의 데이터 위치를 나타내는 샘플 점으로, 고유한 요소를 포함한 상태로 저장되어야 합니다. 샘플 점은 균일하게 샘플링할 필요가 없습니다. A가 timetable형인 경우 디폴트 샘플 점 벡터는 행 시간값으로 구성된 벡터로 이루어집니다. 그렇지 않으면 디폴트 벡터는 [1 2 3 ...]입니다.

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

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

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

테이블 변수로, 'DataVariables'와 함께 변수 이름, 변수 이름으로 구성된 셀형 배열, 숫자형 벡터, 논리형 벡터 또는 함수 핸들이 쉼표로 구분되어 지정됩니다. 'DataVariables' 값은 이상값을 감지할 입력 테이블의 열을 나타내며, 다음 중 하나일 수 있습니다.

  • 단일 테이블 변수 이름을 지정하는 문자형 벡터

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

  • 테이블 변수 인덱스로 구성된 벡터

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

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

예: 'Age'

예: {'Height','Weight'}

예: @isnumeric

데이터형: char | cell | double | single | logical | function_handle

최대 이상값 개수로('gesd' 메서드만 해당), 'MaxNumOutliers'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 'MaxNumOutliers' 값은 'gesd' 메서드가 반환하는 최대 이상값 수를 지정합니다. 예를 들어, filloutliers(A,'linear','gesd','MaxNumOutliers',5)는 5개 이하의 이상값을 반환합니다.

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

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

알려진 이상값 표시자로, 'OutlierLocations', 그리고 A와 크기가 같은 논리형 벡터, 행렬 또는 다차원 배열의 쌍을 쉼표로 구분하여 지정됩니다. 알려진 이상값 표시자 요소는 A의 대응 위치에 이상값이 있음을 나타내는 true이거나, 그렇지 않은 경우 false일 수 있습니다. 'OutlierLocations'를 지정하면 디폴트 이상값 감지 메서드가 비활성화되고 알려진 이상값 표시자의 요소만 사용하여 이상값을 정의합니다.

findmethod가 지정된 경우 'OutlierLocations' 이름-값 쌍을 지정할 수 없습니다.

출력값 TF'OutlierLocations' 값과 동일합니다.

데이터형: logical

출력 인수

모두 축소

채워진 이상값 배열로, 벡터, 행렬, 다차원 배열, table형 또는 timetable형으로 지정됩니다. B의 요소는 A의 요소와 같지만, 모든 이상값이 fillmethod에 따라 바뀝니다.

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

이상값 표시자로, 벡터, 행렬 또는 다차원 배열로 반환됩니다. TF의 요소는 A의 대응 요소가 이상값이면 true이고, 그렇지 않으면 false입니다. TF의 크기는 A와 같습니다.

데이터형: logical

이상값 감지 메서드가 사용하는 하한 임계값으로, 스칼라, 벡터, 행렬, 다차원 배열, 테이블 또는 타임테이블로 반환됩니다. 예를 들어, 디폴트 이상값 감지 메서드의 하한 값은 입력 데이터 중앙값에서 스케일링된 3 MAD 아래 값입니다. 길이가 1인 연산 중인 차원을 제외한 모든 차원에서 L의 크기는 A와 같습니다.

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

이상값 감지 메서드가 사용하는 상한 임계값으로, 스칼라, 벡터, 행렬, 다차원 배열, 테이블 또는 타임테이블로 반환됩니다. 예를 들어, 디폴트 이상값 감지 메서드의 상한 값은 입력 데이터 중앙값에서 스케일링된 3 MAD 위 값입니다. 길이가 1인 연산 중인 차원을 제외한 모든 차원에서 U의 크기는 A와 같습니다.

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

이상값 감지 메서드가 사용하는 중심값으로, 스칼라, 벡터, 행렬, 다차원 배열, 테이블 또는 타임테이블로 반환됩니다. 예를 들어, 디폴트 이상값 감지 메서드의 중심값은 입력 데이터의 중앙값입니다. 길이가 1인 연산 중인 차원을 제외한 모든 차원에서 C의 크기는 A와 같습니다.

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

세부 정보

모두 축소

중앙값 절대 편차

N개의 스칼라 관측값으로 구성된 확률 변수 벡터 A에 대해, 중앙값 절대 편차(MAD)는 다음과 같이 정의됩니다.

MAD = median(|Aimedian(A)|)

여기서 i = 1,2,...,N입니다.

스케일링된 MAD는 c*median(abs(A-median(A)))로 정의됩니다. 여기서 c=-1/(sqrt(2)*erfcinv(3/2))입니다.

확장 기능

R2017a에 개발됨