4コアは常に予測モデルのデータを掃除するときに行う.



導入


あなたがそれから正しい洞察を得ることができるように、データを掃除している間、何をするべきかについてわかっていることは、常に重要です.分析のために正確に浄化されないデータは、誤った結果を生み出すことができます、そして、あなたのモデルが新しいデータでテストされるとき、きちんと一般化するのを防ぎます.
この記事では、分析と予測の準備ができているので、データをきれいにするたびに行う必要があります4つのことを通過します.
このパーティーを始めましょう.

前提条件

  • あなたの環境が設定されていることを確認します
  • あなたのノートにパンダライブラリがインストールされている.
  • あなたのノートにseabornライブラリをインストールします.
  • Numpyライブラリをノートブックにインストールします.
  • データ浄化とは何か


    データセットまたはデータソースから不正確なデータを見つけて、固定するプロセスは、データクリーニングとして公知である.簡単な用語では、それは探索的データ分析(EDA)のためのデータを準備するプロセスを指します.
    データのクリーニングがどのようなものかを理解してきたので、EDAのデータを準備するのに必要な4つの項目について作業を開始することができます.
    したがって、独自の問題のために、私はこの記事で利用されるデータセットを公開することができません.しかし、私たちはスクリーンショットを提供します.
    これらは、分析と予測のためのデータをきれいにするときに行う4つのことです.

    Note: make sure you have imported these two libraries into your environment.


    import pandas as pd
    import seaborn as sns
    import numpy as np
    

    1 .欠落値の処理


    データ科学者/アナリストとしての最初のものは、欠落している値のためにあなたのデータの情報を常にチェックすることです.この型を行うには、次のコードを実行します
    df = pd.read_csv(file_path) #Input the filepath
    
    df.info()
    
    私のファイルの場合、これは私のスクリーンショットです.

    上の画像(注釈部)から8606のエントリがあります.現在、データグラムのコラム/特徴を見て、我々は明らかに行方不明の値があるのを見ることができます.私たちの次のことは、それらの不足している値に対処することです.

    Now this is where the question comes


    どのように我々は行方不明の値に対処できますか?


    それが時系列でないデータになるとき(私は、もう一つの記事でそれについて話します).それについては二つの方法がある.
  • 値を削除します.
  • 碑文.
  • ドロップ値


    DataFrameの値を削除する必要がある唯一の時間は、観測の60 %以上が欠落している場合です.したがって、データファイルの60 %を確認して、データの60 %が見つからないことを発見した場合、それが不要であると思われる場合は、不足している値で列を削除するのは賢明かもしれません.これらの観測をドロップしたい場合は

    Another thing to consider is if you're building a model to predict something and you discover that the target column (i.e. this is the column you want to forecast) has missing values. You must remove all missing values from the target column, which will have an impact on other columns as well.


    したがって、私たちのケースでは、私たちの目標列(“PiceRunusddLung Perstricm M 2”)は値を欠落しています.そのためには以下のようにタイプします:
    df.dropna(subset = ["price_usd_per_m2"], inplace=True)
    
    では、データフレームの情報を確認しましょう.
    df.info()
    

    我々は現在、我々のDataframeが8606から4895のエントリまで縮小したと認めることができます.しかし、あなたが見ることができるように、まだいくつかの欠けている値があります.では、欠落しているデータを扱う2つの基準を見てみましょう.私たちは、最初の基準(低下値)が床と費用であるコラムのいくつかに適用されるのを見ることができます.
    df.drop(columns = ["floor", "expenses"], inplace=True)
    

    我々はまだいくつかの欠落した値を持っていることがわかりますが、彼らは60 %までではないので、私たちは行方不明の値を扱う他の種類に移動します.


    欠落データの補完に関しては、最も一般的な方法は列内のすべての合計値の平均値を使用することです.しかし、あなたが私が以下に概説するか意味を使用しないべきであるとき、いくつかのガイドラインがあります.次のとおり.
    -列が正の値と負の数のような異なるバリエーションを持つ値を含む場合、平均を使用しないでください.
    -列が1 sと0 sのバイナリ値を含んでいる場合、平均的なアプローチを使用しないでください.
    次の機能としてあなたの列がそれらの観測をドロップすることをお勧めします.

    Note don't confuse observation with a column. Observation means row so if you want to drop rows you make use of the following code


    df.dropna(subset=[""], inplace=True)
    

    As previously stated, this approach does not work with time-series data. It has a different approach to dealing with missing values, which I'll cover in a later article.

    Also note it is always advisable to fill a column that has numeric missing values such as float and integer.


    現在のデータセットには、上記の基準を持っていないので、私たちのデータセットに戻るために、平均的なアプローチを使用するつもりです.それで、私はそれを合計値の平均値で満たすつもりです.以下のコードを入力します.
    df.fillna(np.mean(df["rooms"], inplace=True)
    

    現在、私たちは行方不明の値を持っている数値列を持っていません.

    多共線のチェック


    多重共線性は,特徴行列(目標変数を除くdataframeのすべての変数を含む)の独立変数が相関する統計的概念である.今、我々は多共線性が何であるかについて理解しました.それをチェックしましょう
    PreiceLag APROXXUARD USDが私たちの目標値であるので、私たちのdataframeに戻ってください、私たちは、それをコピーするつもりです(それがinplaceパラメタを使用せずにDrop属性で通過するつもりです).したがって、複数の共線性は以下のようになります.
    df.drop(columns = "price_aprox_usd").corr()
    

    Notice that I didn't pass in inplace so it returns a copy of the data frame without price_usd_per_m2 and also notice the .corr() attribute it is used to find the correlation.


    上記を実行した後は、このようなことがあります.

    私たちが相関関係を数値的に見た今、何が起こっているかについて知ることができるように、それは視覚的によいでしょう.それで、我々はseabornを使用しています.上記のコードを変数vis_corrに保存します.私が意味するものを見るために、下記をチェックしてください.
    vis_corr = df.drop(columns = "price_aprox_usd").corr()
    
    今すぐ可視化するには、次のコードを参照してください.
    sns.heatmap(vis_corr);
    

    では、ここで何が起こっているのか解凍しましょう.上の図は、DataFramameのさまざまな機能間の相関のレベルを示します.しかし、それらの相関値が0.5より大きい特徴があるならば、それらの特徴が互いに非常に相関していることを意味します.
    我々がその価格を見ることができるということを理解した今、PriceSignal AproxLe LocalRise通貨はお互いに相関しています.また、表層のIntellestricttotalense Intalm 2および界面張力被覆DELINE M 2も、非常に相関している.だから、それらの機能の1つを削除する必要があります.
    問題は、現在どのように我々はどのように我々は我々のデータフレーム内の複数の直線性との懸念に気づいているドロップする方法を知っていますか
    どの機能を排除するかを把握するためには、これらの機能とターゲット変数の間の関連を見る必要があります.その後、最高の相関値を持つ機能は、ドロップされるものになります.私が言っていることを理解するために以下のコードを参照してください.また、コメントとして各変数の相関値も含みます.
    df["price"].corr(df["price_aprox_usd"]) #corr_value = 0.68
    
    df["price_aprox_local_currency"].corr(df["price_aprox_usd"]) #corr_value = 1.0
    
    df["surface_covered_in_m2"].corr(df["price_aprox_usd"]) #corr_value = 0.13
    
    df["surface_total_in_m2"].corr(df["price_aprox_usd"]) #corr_value=0.21
    
    
    今、私たちはすべての機能の相関値を見ましたので、落とさなければならない特徴はprice_aprox_local_currencysurface_covered_in_m2です.surface_covered_in_m2ではなくsurface_total_in_m2となります.私は形容詞のように感じる“合計”それはより多くの情報がよくなります.
    だから、話す価値が最も低いもののために行く必要があるかもしれません.しかし、私の好みに基づいて、私はsurface_covered_in_m2そうするために、我々はタイプしなければなりません
    df.drop(columns = ["price_aprox_local_currency", "surface_covered_in_m2"], inplace=True)
    
    それで、我々が行ってよいということをしたので.我々が見なければならないもう一つの中心的なものを見ましょう.

    3 .リーク機能の取り扱い


    どのようなリーク機能を理解する.次のシナリオを検討:あなたは準備していなかったの試験を受ける予定だったが、あなたは十分に幸運をして部屋に入る前に試験問題に答えを参照してください.どのようにあなたは全く答えを見ていなかったとは対照的に実行されますか?あなたは右のすべての試験に合格します!それはリーク機能も何です.彼らは、モデルを馬鹿にして、何か異常を予測することができるいくつかの種類の思考をモデルにしている間、それが前に見られていないデータを予測するとなると、モデルは完全に失敗します.
    だから私たちのデータフレームに戻ってチェックしてください私たちのデータフレーム内のいずれかのリーク機能があるかもしれません.
    df.info()
    

    したがって、我々のDataFramameでは、我々はそれにリーク機能があるのを見ることができます.当社のリーク機能はpriceprice_usd_per_m2price_per_m2です.我々はこれらの機能は、我々は住宅価格を予測することができますモデルを構築したいと考えて我々のデータフレームに不正行為を見ることができます.それは我々のデータフレームに再び価格コラムを持っていることは非常に愚かです.これらのカラムはprice_aprox_usdであるターゲット変数に不正です.我々はdataframeからそれらを削除する必要があります.
    df.drop(columns = "price_usd_per_m2", "price_per_m2", inplace=True)
    
    今私たちが行われて我々は行くのは良いです.では、予測モデルを構築するときに焦点を合わせる必要がある最後の中心的なことを見てみましょう.

    高・低cardinality分類変数の削除


    cardinalityカテゴリ変数(e、gの場所、名前、電子メールなど)は、それが値の少数または多くのユニークな数を持っているときに低くまたは高いと言われています.
    私たちのために、私たちのカテゴリー変数のcardinalityをチェックすることができます.次のコードを使用します.
    df.select_dtypes("O").nunique()
    
    コードを実行した後に、私たちはobject datatypeoperationである1つの低くて高いcardinality変数を持っているのを見ることができます.だから私たちはそれらをドロップする必要があります.cardinality変数を落とす本質は、それが我々が望まない我々のモデルで狂気を引き起こすということです.
    df.drop(columns = ["operation", "properati_url"], inplace=True)
    

    結論


    だから我々の旅の終わりには、まだ他のコアのものは、アウトリーサーや他の種類のものを扱うようなデータを洗浄するときに見ている.お読みありがとうございます.私は提案、フィードバック、および私は記事に改善する必要が開いている.あなたは、より多くの記事のために私に続くことができます.感謝