logo
Loading...

只要超過三倍標準差就一定要刪除或補值嗎? - Cupoy

from scipy import statsz=np.abs(stats.zscore(df))n...

Outlier Detection

只要超過三倍標準差就一定要刪除或補值嗎?

2021/07/19 下午 00:04
數值型特徵 - 去除離群值
shanhao
觀看數:674
回答數:2
收藏數:0
Outlier Detection

from scipy import stats z=np.abs(stats.zscore(df)) n=np.where(z>3) outlier=df.iloc[:,n[1]].columns.unique() 我把所有超過三倍標準差的欄位選出來後總共有(有先去除類別欄位): ['BsmtHalfBath', 'EnclosedPorch', '3SsnPorch', 'KitchenAbvGr', 'MSSubClass', 'BsmtFinSF2', 'MasVnrArea', 'OpenPorchSF', 'GarageYrBlt', 'ScreenPorch', 'LowQualFinSF', 'LotArea', 'BsmtFinSF1', 'BsmtFullBath', 'BedroomAbvGr', 'WoodDeckSF', 'OverallCond', 'GrLivArea', 'BsmtUnfSF', 'Fireplaces', 'TotRmsAbvGrd', 'HalfBath', 'LotFrontage', 'PoolArea', 'YearBuilt', '2ndFlrSF', 'TotalBsmtSF', 'MiscVal', 'OverallQual', 'GarageCars', 'GarageArea']這31個欄位,想請問如果用刪除的方式會不會丟掉太多資訊?那又該如何選擇哪些欄位是用調整離群值(df.clip(a,b))的方式?總共也才36個數值欄位就有31個要處理。

回答列表

  • 2021/07/19 下午 02:58
    Yun
    贊同數:1
    不贊同數:0
    留言數:6

    你好 請問這裡的df是哪個值? 整個從kaggle下載下來的train_df有81 column,哪怕你處理過後變36個 你可能要提供更完整的程式碼 我們才能更好的理解你的情況 然後z score得部分你可能要先決定哪一個欄位類別來計算吧 假設你以SalePrice為 z score的計算標準 3個標準差的 房子可能是 太過便宜或太貴 這個時候 可能你跑出來的這些欄位 都會出現的原因是可能你的資料沒有先處理 1. 如salescondition 就有normal跟abnormal 像這種都得分開處理 2.然後房子的大小跟價格也會有很多的因素 (這時就可以 算price/LotArea 算每坪多少錢之類的 這樣的單位比較一致性) 3.年份也都是影響價格的因素

  • 2021/07/21 下午 07:40
    Yilin
    贊同數:1
    不贊同數:0
    留言數:1

    在一般實作下通常我們不太會盲目直接以三倍標準差方式直接刪。建議可以先透過EDA方式了解資料型態,看看是否常態分佈或是偏左偏右。如果有的話再進行離群值移除,移除方式建議先以專家領域知識下看看是否合理。另外刪除離群值的其中一個原因是希望資料分布能夠常態。若訓練中有過多極端(異常)值可能會影響模型的擬合,而導致模型泛化能力不佳。這篇[文章](https://andy6804tw.github.io/2021/04/02/python-outliers-clean/)可以給你參考哦!