기본 콘텐츠로 건너뛰기

라벨이 이상치인 게시물 표시

pandas_ta를 적용한 통계적 인덱스 지표

[ML] 마할로비스(Mahalnobis) 거리와 이상치 감지

마할로비스(Mahalnobis) 거리 마할로비스(Mahalnobis) 거리 벡터인 한점과 분포 사이의 거리를 측정하는 효과적인 다변량 거리 메트릭스 이 지표는 다변량의 이상 탐지, 높은 불균형한 데이터 세트의 분류, 단일 클래스 분류, 새로운 데이터들의 예측에 효과적입니다.2차원의 두 점사이의 거리를 나타낼 경우 일반적으로 유클리드거리가 사용됩니다. 그 두점 (p1, p2), (q1, q2)라고 하면 유클리드 거리는 다음과 같이 계산됩니다. $$\tag{식 1}d(p, q) =\sqrt{(p_1-q_1)^2+(p_1-q_2)^2}$$ 식 1을 다차원으로 확장하면 즉, $(p_1, p_2, \cdots, p_n), \;(q_1, q_2, \cdots, q_n)$ 유클리드 거리는 식 2와 같이 계산됩니다. $$\tag{식 2}d(p, q) =\sqrt{(p_1-q_1)^2+(p_1-q_2)^2+ \cdots +(p_n-q_n)^2}$$ 식 2와 같이 다차원의 경우 모든 차원에 대한 가중치는 전혀 고려되지 않습니다. 즉, 차원들 사이에 영향이 없다는 가정이 성립되어야 합니다(모든 차원은 독립적). import numpy as np import numpy.linalg as la import pandas as pd from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") np.random.seed(3) X=np.random.normal(0, 1, 100) X1=np.linspace(-2,2, 100) y1=X1+np.random.randn(100) p1=(-1, 1) p2=(1, 1) fig, ax=plt.subplots(1, 2, figsize=(7, 3), sharey=True) ax[0].scatter(X1, X, s=5) ax[0].sc...

[data analysis] 회귀모형에서 이상치(outlier) 파악

회귀모형에서 이상치(outlier) 파악 관련된 내용 Hat 행렬 레버리지(Leverage) 스튜던트 잔차(rstudent) Cook's Distance(D) 회귀계수의 검정에서 사용한 f분포는 기본적으로 검정대상이 정규분포에 부합한다는 가정하에 실시합니다. 이점은 회귀분석의 기본가정인 정규성에 대한 이유가 되며 이것을 확인하기 위해 모델에 의해 생성되는 확률변수인 잔차의 정규성을 검정합니다. 정규성을 시각적으로 판단하기 위해 그림 1과 같은 q-q plot을 사용하며 정량적인 검정을 위해 Shapiro-wilk 또는 Anderson-Darling 검정방법을 적용할 수 있습니다. 그림 1은 stats.probplot() 에 의한 qq plot으로 양끝에서 정규성에 이탈하는 모양을 나타냅니다. 이에 대한 정량적인 검정은 stats.shapiro() 함수에 의해 실행합니다. 그림 1은 다음 코드로 생성되는 특정한 기간의 코스피 주가의 Open과 Close에 대한 회귀모델에서의 오차(error)에 대한 것입니다. 이 과정에서 원시데이터는 표준화하였습니다. import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from scipy import stats import matplotlib.pyplot as plt import FinanceDataReader as fdr st=pd.Timestamp(2021,1, 1) et=pd.Timestamp(2024, 5, 10) kos=fdr.DataReader('KS11',st, et)[["Open","Close"]] kos.index=range(len(kos)) X=kos.values[:,0].reshape(-1,1) y=k...

[data analysis] 변동: 사분위수(Quantile)

변동(Variation) 관련내용 범위(range) 4분위수(Quantile) 중간값 절대 편차(MAD) 분산(Variance) 표준편차(Standard Deviation) 분산계수(Variation Coefficient) 4분위수(Quantile) 4분위(quantile)는 변동을 측정하는 다양한 방법 중의 하나입니다. 예를 들어 자료 {4, 6, 2, 4, 6, −4, −7, 145}의 경우 이상치로 간주할 수 있는 현저하게 큰 값을 포함하고 있습니다. 이러한 경우 범위는 그 자료의 변동 특성을 올바르게 나타낼 수 없습니다. 대신에 전체 데이터들을 순서적으로 정렬하여 몇 개의 그룹으로 구분하여 각 그룹의 경계값들을 기준으로 데이터의 퍼짐의 정도 즉, 변동을 나타낼 수 있습니다. 그러므로 이상치에 대한 영향을 감소시킬 수 있습니다. 4분위수는 데이터 셋 전체를 4부분으로 구분하며 다음 과정으로 계산합니다. 오름차순으로 정렬 중간값(median)을 결정(Q 2 ) 2 번에서 결정한 중간값을 기준으로 작은 값들 사이에 중간값(Q 1 )과 큰 값들 사이에 중간값(Q 3 )을 결정합니다. 위의 과정으로 산출한 4 분위수Q 1 , Q 2 , 그리고 Q 3 는 각각 전체 데이터의 25%, 50%, 그리고 75%에 대응하는 값입니다. 이 분위수는 numpy의 quantile(x), percentile(x) 함수를 사용하여 결정할 수 있습니다. numpy.quantile(x, q, axis=none) 지정된 축을 따라 데이터(x)의 q번째 분위수를 계산합니다. q: [0, 1]사이의 값 또는 그 사이 값들로 구성된 리스트 예로 4분위수의 경우 :0.25, 0.50, 0.75 axis: 2차원이상의 객체의 경우 기준이 되는 축을 지정 axis = 1 → 행 axis = 0 → 열 axis를 지정하지 않는 경우 객체를 1차원으로 인식하여 모든 값들에 대해 계산합니다. np.precentile()...

[data analysis] 변동: 범위(Range)

변동(Variation) 관련내용 범위(range) 4분위수(Quantile) 중간값 절대 편차(MAD) 분산(Variance) 표준편차(Standard Deviation) 분산계수(Variation Coefficient) 범위(range) 데이터 셋의 범위를 의미합니다. 식 1과 같이 그 범위는 최대값과 최소값의 차이를 나타냅니다. 범위 = 최대값 - 최소값 (식 1) 이 값은 numpy 함수인 max() 와 min() 을 사용하여 데이터 셋의 최대와 최소값을 결정한 후 두 값의 차이로 계산할 수 있습니다. 다음은 [1, 100) 사이에 랜덤수 50개를 추출한 후 그 범위를 산출한 것입니다. np.max(x, axis=None) 배열 객체 x에서 지정한 축에 따라 최대값을 반환 axis: None일 경우 1차원 벡터로 자동 변환 후 최대값 반환 array.max(axis), pd객체.max(axis) 와 같음 np.min(x, axis=None) 배열 객체 x에서 지정한 축에 따라 최소값을 반환 axis: None일 경우 1차원 벡터로 자동 변환후 최소값 반환 array.min(axis) , pd객체.min(axis)과 같음 np.random.seed(1) d=np.random.randint(1, 100, 5) d_max, d_min=np.max(d), np.min(d) d_max, d_min (76, 10) rng=d_max-d_min; rng 66 예) 다음 데이터들의 범위를 계산합니다. A = {4, 6, 2, 4, 6, −4, −7, 45} B = {4, 6, 2, 4, 6, −4, −7, 145} A 의 범위 = 45 - (-7) = 52 B의 범위 = 145 - (-7) = 152 위 예에서 두 그룹 A와 B는 하나의 값을 제외하고 같습니다. 그러나 B의 최대값은 다른 값에 비해 현저한 차이를...