引き続きHome Creditコンペに取り組みます。Kaggle解析の基本フローにのっとり進めていこうと思います。本日は2を行います。
- 明らかにしたい問いや、問題の定義
- 訓練およびテストデータの取得
- データの整形、作成、クレンジング
- パターンの分析、特定、また探索的にデータを分析する
- 問題のモデル化、予測、解決
- 問題解決のステップと最終的な解決方法を視覚化、報告
- 結果の提出
データ自体は通常通り下記のコードでそれぞれ格納します。今回はファイルサイズが重たいので、全て同一フォルダに入れているので下記のようなコードになります。一旦全データを格納しています。submission sample, data descriptionは解析自体には使用しないので割愛。
import pandas as pd
import numpy as np
import matplotlib as plt
import sklearn
train_df = pd.read_csv("application_train.csv")
test_df = pd.read_csv("application_test.csv")
bur = pd.read_csv("bureau.csv")
bur_b = pd.read_csv("bureau_balance.csv")
cd_b = pd.read_csv("credit_card_balance.csv")
ins_p = pd.read_csv("installments_payments.csv")
pos_c = pd.read_csv("POS_CASH_balance.csv")
prv_a = pd.read_csv("previous_application.csv")
pd.shapeでデータ構成をみるのも良いのですが、HomeCredit_columns_description.csvの中に各カラムの説明がありましたのでそちらをまずは見てみようと思います。中身はこんな感じで、使用されているTableとカラム名、説明が書いてあります。なんと全部で221カラムもありますが重要なところなので、訳しながら見ていきたいと思います。
No | Table | Row | Description |
1 | application_{train|test}.csv | SK_ID_CURR | ID of loan in our sample |
2 | application_{train|test}.csv | TARGET | Target variable (1 – client with payment difficulties: he/she had late payment more than X days on at least one of the first Y installments of the loan in our sample, 0 – all other cases) |
5 | application_{train|test}.csv | NAME_CONTRACT_TYPE | Identification if loan is c ash or revolving |
ということでカラムをいい加減に英訳したのが下記となります。相当いい加減ですので転用する際は再度の確認をした方が良いかと思います。
Row | 内容 |
SK_ID_CURR | LoanのID |
TARGET | 1: 最初のY回の支払いにおいて、X 日以上の遅延が発生した |
NAME_CONTRACT_TYPE | ローンの種類。現金かリボルビングか |
CODE_GENDER | 顧客の性別 |
FLAG_OWN_CAR | 顧客が車を持っているか? |
FLAG_OWN_REALTY | 顧客の住居。家かアパートか |
CNT_CHILDREN | 顧客の子供の数 |
AMT_INCOME_TOTAL | 顧客の収入 |
AMT_CREDIT | 顧客のローン金額 |
AMT_ANNUITY | ローン年金 |
AMT_GOODS_PRICE | ローン商品の価格(?) |
NAME_TYPE_SUITE | ローン申し込み時の同行者 |
NAME_INCOME_TYPE | 顧客の収入の種類 |
NAME_EDUCATION_TYPE | 顧客の最終学歴 |
NAME_FAMILY_STATUS | 顧客の家族のステータス |
NAME_HOUSING_TYPE | 居住状況(借家、両親と同居) |
REGION_POPULATION_RELATIVE | 顧客住居エリアの人口レベル |
DAYS_BIRTH | 申請時の顧客の年齢 |
DAYS_EMPLOYED | 顧客の直近の勤務日数 |
DAYS_REGISTRATION | 顧客が変更するまでの日数(?) |
DAYS_ID_PUBLISH | ローン申請時からの身分証明書変更日数(?) |
OWN_CAR_AGE | 顧客の車の年代 |
FLAG_MOBIL | 携帯があるか?(1 = yes) |
FLAG_EMP_PHONE | 仕事用の電話があるか(1 =yes) |
FLAG_WORK_PHONE | 家庭用の電話があるか(1 =yes) |
FLAG_CONT_MOBILE | 携帯電話を届けたか?? |
FLAG_PHONE | 家庭用の電話があるか(1 =yes) |
FLAG_EMAIL | Emailを持っているか(1=yes) |
OCCUPATION_TYPE | 顧客の職業の種類 |
CNT_FAM_MEMBERS | 顧客の家族が何人いるか? |
REGION_RATING_CLIENT | 顧客居住地域のレーティング(会社独自) |
REGION_RATING_CLIENT_W_CITY | 都市を考慮した顧客居住地域のレーティング(会社独自) |
WEEKDAY_APPR_PROCESS_START | 顧客がローンを申請した曜日 |
HOUR_APPR_PROCESS_START | 顧客がローンを申請したおおよその時間 |
REG_REGION_NOT_LIVE_REGION | 顧客の本籍地と申請住所が一致しているか?(1 = 異なる) 0: 地域レベルで一致 |
REG_REGION_NOT_WORK_REGION | 顧客の本籍地と職場住所が一致しているか?(1 = 異なる) 0: 地域レベルで一致 |
LIVE_REGION_NOT_WORK_REGION | 顧客の申請住所と職場住居が一致しているか? (1 = 異なる) 0: 地域レベルで一致 |
REG_CITY_NOT_LIVE_CITY | 顧客の本籍地と申請住所が一致しているか?(1 = 異なる) 0: 都市レベルで一致 |
REG_CITY_NOT_WORK_CITY | 顧客の申請住所と職場住居が一致しているか? (1 = 異なる) 0: 都市レベルで一致 |
LIVE_CITY_NOT_WORK_CITY | 顧客の申請住所と職場住居が一致しているか? (1 = 異なる) 0: 都市レベルで一致 |
ORGANIZATION_TYPE | 顧客勤務先の組織のタイプ |
EXT_SOURCE_1 | 外部データソースからの正規化スコア 1 |
EXT_SOURCE_2 | 外部データソースからの正規化スコア 2 |
EXT_SOURCE_3 | 外部データソースからの正規化スコア 3 |
APARTMENTS_AVG | 顧客が住んでいるアパート階の平均 |
BASEMENTAREA_AVG | 顧客が住んでいるアパートの地下フロア平均 |
YEARS_BEGINEXPLUATATION_AVG | 開発平均時期(?) |
YEARS_BUILD_AVG | 平均築年数 |
COMMONAREA_AVG | 共有エリアの平均 |
ELEVATORS_AVG | エレベータ平均 |
ENTRANCES_AVG | エントランス平均 |
FLOORSMAX_AVG | 最大階数平均 |
FLOORSMIN_AVG | 最低階数平均 |
LANDAREA_AVG | 土地面積平均 |
LIVINGAPARTMENTS_AVG | アパートのリビングの平均 |
LIVINGAREA_AVG | リビング領域の平均 |
NONLIVINGAPARTMENTS_AVG | 居住していないアパート平均 |
NONLIVINGAREA_AVG | 人のいないエリアの平均 |
APARTMENTS_MODE | 顧客が住んでいるアパート階の最頻値 |
BASEMENTAREA_MODE | 顧客が住んでいるアパートの地下フロア最頻値 |
YEARS_BEGINEXPLUATATION_MODE | 開発最頻値時期(?) |
YEARS_BUILD_MODE | 最頻値築年数 |
COMMONAREA_MODE | 共有エリアの最頻値 |
ELEVATORS_MODE | エレベータ最頻値 |
ENTRANCES_MODE | エントランス最頻値 |
FLOORSMAX_MODE | 最大階数最頻値 |
FLOORSMIN_MODE | 最低階数最頻値 |
LANDAREA_MODE | 土地面積最頻値 |
LIVINGAPARTMENTS_MODE | アパートのリビングの最頻値 |
LIVINGAREA_MODE | リビング領域の最頻値 |
NONLIVINGAPARTMENTS_MODE | 居住していないアパート最頻値 |
NONLIVINGAREA_MODE | 人のいないエリアの最頻値 |
APARTMENTS_MEDI | 顧客が住んでいるアパート階の中央値 |
BASEMENTAREA_MEDI | 顧客が住んでいるアパートの地下フロア中央値 |
YEARS_BEGINEXPLUATATION_MEDI | 開発中央値時期(?) |
YEARS_BUILD_MEDI | 中央値築年数 |
COMMONAREA_MEDI | 共有エリアの中央値 |
ELEVATORS_MEDI | エレベータ中央値 |
ENTRANCES_MEDI | エントランス中央値 |
FLOORSMAX_MEDI | 最大階数中央値 |
FLOORSMIN_MEDI | 最低階数中央値 |
LANDAREA_MEDI | 土地面積中央値 |
LIVINGAPARTMENTS_MEDI | アパートのリビングの中央値 |
LIVINGAREA_MEDI | リビング領域の中央値 |
NONLIVINGAPARTMENTS_MEDI | 居住していないアパート中央値 |
NONLIVINGAREA_MEDI | 人のいないエリアの中央値 |
FONDKAPREMONT_MODE | わかんないから別で調べる |
HOUSETYPE_MODE | 建物タイプの最頻値 |
TOTALAREA_MODE | トータルエリアの最頻値 |
WALLSMATERIAL_MODE | 壁の素材最頻値 |
EMERGENCYSTATE_MODE | 緊急事態最頻値 |
OBS_30_CNT_SOCIAL_CIRCLE | 過去30日間の顧客社会環境の観察内容 |
DEF_30_CNT_SOCIAL_CIRCLE | 過去30日間の顧客社会環境のデフォルト観察内容 |
OBS_60_CNT_SOCIAL_CIRCLE | 過去60日間の顧客社会環境の観察内容 |
DEF_60_CNT_SOCIAL_CIRCLE | 過去60日間の顧客社会環境のデフォルト観察内容 |
DAYS_LAST_PHONE_CHANGE | 申し込み前何日前に電話を変更したか? |
FLAG_DOCUMENT_2 | 顧客から提供のあった資料2 |
FLAG_DOCUMENT_3 | 顧客から提供のあった資料3 |
FLAG_DOCUMENT_4 | 顧客から提供のあった資料4 |
FLAG_DOCUMENT_5 | 顧客から提供のあった資料5 |
FLAG_DOCUMENT_6 | 顧客から提供のあった資料6 |
FLAG_DOCUMENT_7 | 顧客から提供のあった資料7 |
FLAG_DOCUMENT_8 | 顧客から提供のあった資料8 |
FLAG_DOCUMENT_9 | 顧客から提供のあった資料9 |
FLAG_DOCUMENT_10 | 顧客から提供のあった資料10 |
FLAG_DOCUMENT_11 | 顧客から提供のあった資料11 |
FLAG_DOCUMENT_12 | 顧客から提供のあった資料12 |
FLAG_DOCUMENT_13 | 顧客から提供のあった資料13 |
FLAG_DOCUMENT_14 | 顧客から提供のあった資料14 |
FLAG_DOCUMENT_15 | 顧客から提供のあった資料15 |
FLAG_DOCUMENT_16 | 顧客から提供のあった資料16 |
FLAG_DOCUMENT_17 | 顧客から提供のあった資料17 |
FLAG_DOCUMENT_18 | 顧客から提供のあった資料18 |
FLAG_DOCUMENT_19 | 顧客から提供のあった資料19 |
FLAG_DOCUMENT_20 | 顧客から提供のあった資料20 |
FLAG_DOCUMENT_21 | 顧客から提供のあった資料21 |
AMT_REQ_CREDIT_BUREAU_HOUR | 申請1時間前の顧客に関する信用調査機関への問い合わせ件数 |
AMT_REQ_CREDIT_BUREAU_DAY | 申請1日前の顧客に関する信用調査機関への問い合わせ件数 |
AMT_REQ_CREDIT_BUREAU_WEEK | 申請1週間前の顧客に関する信用調査機関への問い合わせ件数 |
AMT_REQ_CREDIT_BUREAU_MON | 申請1ヶ月前の顧客に関する信用調査機関への問い合わせ件数 |
AMT_REQ_CREDIT_BUREAU_QRT | 申請3ヶ月前の顧客に関する信用調査機関への問い合わせ件数 |
AMT_REQ_CREDIT_BUREAU_YEAR | 申請6ヶ月前の顧客に関する信用調査機関への問い合わせ件数 |
SK_ID_CURR | ローンサンプルID. |
SK_BUREAU_ID | ローンに関連する過去の信用会社の記録ID |
CREDIT_ACTIVE | レポートしているクレジットのステータス |
CREDIT_CURRENCY | クレジットの通貨 |
DAYS_CREDIT | 信用調査を申請の何日前に行ったか |
CREDIT_DAY_OVERDUE | 関連ローンの遅延日数 |
DAYS_CREDIT_ENDDATE | 申請時のCBクレジットの残り期間日数 |
DAYS_ENDDATE_FACT | 申請時のCBクレジット終了からの日数 |
AMT_CREDIT_MAX_OVERDUE | 信用期間のクレジットで延滞している最大金額 |
CNT_CREDIT_PROLONG | 信用調査期間の信用延長回数 |
AMT_CREDIT_SUM | 信用調査期間の現在のクレジット金額 |
AMT_CREDIT_SUM_DEBT | 信用調査期間の現在の債務金額 |
AMT_CREDIT_SUM_LIMIT | 報告されている与信限度額 |
AMT_CREDIT_SUM_OVERDUE | 現在の延滞金額 |
CREDIT_TYPE | 信用調査機関のクレジットタイプ |
DAYS_CREDIT_UPDATE | 最終情報受領日(ローン申請より何日まえか?) |
AMT_ANNUITY | 信用調査機関クレジットの年金 |
SK_BUREAU_ID | 信用機関ID |
MONTHS_BALANCE | 申請日に対する残高 |
STATUS | その月の信用調査機関クレジットの状態 C: closed, X: unknown, 0: DPDなし, 1:DPD 1-30, 2:DPD 31-60, 5:DPD +120以上or売却・償却 DPD:期限がすぎた日数 |
SK_ID_PREV | 過去のサンプルローンID |
SK_ID_CURR | 現在のサンプルローンID |
MONTHS_BALANCE | 申請日に対する残高 -1:最新月次データ 0:申請時の情報 |
CNT_INSTALMENT | 以前のクレジットの期間 |
CNT_INSTALMENT_FUTURE | 以前のクレジットにおける残り分割回数 |
NAME_CONTRACT_STATUS | その月の契約状況 |
SK_DPD | 前のクレジットの延滞日数 |
SK_DPD_DEF | 許容範囲の延滞日数(DPD) |
SK_ID_PREV | 以前のクレジットID (Home credit社) |
SK_ID_CURR | 現在のサンプルローンID |
MONTHS_BALANCE | 申請日に対する月末残高 |
AMT_BALANCE | 前のクレジットの月末残高 |
AMT_CREDIT_LIMIT_ACTUAL | 前のクレジットの月次限度額 |
AMT_DRAWINGS_ATM_CURRENT | 前のクレジットでATMから引き出された額(月間) |
AMT_DRAWINGS_CURRENT | 前のクレジットから引き出された額(月間) |
AMT_DRAWINGS_OTHER_CURRENT | 過去のクレジットからその他で引き出された金額 |
AMT_DRAWINGS_POS_CURRENT | 加工のクレジット月で商品を引き出したり購入したりする金額 |
AMT_INST_MIN_REGULARITY | 過去のクレジットの最小分割払い |
AMT_PAYMENT_CURRENT | 月々の支払い金額 |
AMT_PAYMENT_TOTAL_CURRENT | 過去のクレジットでの支払い総額 |
AMT_RECEIVABLE_PRINCIPAL | 前回のクレジットの元本 |
AMT_RECIVABLE | 過去のクレジットの売掛金 |
AMT_TOTAL_RECEIVABLE | 過去のクレジットの売掛合計金額 |
CNT_DRAWINGS_ATM_CURRENT | 過去のクレジットの当月のATM引出し数 |
CNT_DRAWINGS_CURRENT | 過去のクレジットの引出し数 |
CNT_DRAWINGS_OTHER_CURRENT | 過去のクレジットのその他の引出し数 |
CNT_DRAWINGS_POS_CURRENT | 過去のクレジットの商品の引き出し回数 |
CNT_INSTALMENT_MATURE_CUM | 過去のクレジットの支払い回数実績 |
NAME_CONTRACT_STATUS | 契約名称 |
SK_DPD | 過去のクレジットにおける支払い遅延日数 |
SK_DPD_DEF | 過去のクレジットの許容範囲の支払い遅延日数 |
SK_ID_PREV | 過去のクレジットのID |
SK_ID_CURR | ローンサンプルID. |
NAME_CONTRACT_TYPE | 過去の申請の契約名称 |
AMT_ANNUITY | 過去の申請の年金 |
AMT_APPLICATION | 過去の申請の金額 |
AMT_CREDIT | 最終的な承認金額 |
AMT_DOWN_PAYMENT | 過去の申請の頭金 |
AMT_GOODS_PRICE | 要求した金額 |
WEEKDAY_APPR_PROCESS_START | 過去の申請を行った曜日 |
HOUR_APPR_PROCESS_START | 過去の申請を行ったおおよその時間 |
FLAG_LAST_APPL_PER_CONTRACT | その契約における最後の新星かどうか? |
NFLAG_LAST_APPL_IN_DAY | 1日あたりの最後の申請だったかどうか? |
NFLAG_MICRO_CASH | マイクロファイナンスローンだったかどうか? |
RATE_DOWN_PAYMENT | 過去の申請の頭金率 |
RATE_INTEREST_PRIMARY | 過去の申請ローンの1次金利 |
RATE_INTEREST_PRIVILEGED | 過去の申請ローンの特約金利 |
NAME_CASH_LOAN_PURPOSE | キャッシュローンの目的 |
NAME_CONTRACT_STATUS | 契約ステータス名称 |
DAYS_DECISION | 申請の比較 |
NAME_PAYMENT_TYPE | 前回の申請の支払い方法 |
CODE_REJECT_REASON | 申請却下理由 |
NAME_TYPE_SUITE | 申請時の同行者名 |
NAME_CLIENT_TYPE | 過去の申請の新旧顧客(?) |
NAME_GOODS_CATEGORY | 過去申請時の商品種類 |
NAME_PORTFOLIO | 過去の申請のポートフォリオ |
NAME_PRODUCT_TYPE | 過去の申請がx-sellかwalk-inか |
CHANNEL_TYPE | 過去の申請で顧客を申請したチャンネル |
SELLERPLACE_AREA | 過去申請の販売されたエリアまたは地点 |
NAME_SELLER_INDUSTRY | 売り手の産業種類 |
CNT_PAYMENT | 過去申請のクレジット期間 |
NAME_YIELD_GROUP | 過去申請の金利グループ |
PRODUCT_COMBINATION | 過去申請の詳細組み合わせ |
DAYS_FIRST_DRAWING | 申請日基準で何日後に初回の引き出しをしたか |
DAYS_FIRST_DUE | 申請日基準で何日後に初回の申請をしたか |
DAYS_LAST_DUE_1ST_VERSION | 申請日基準で何日前に1stバージョンの最終版を提出したか |
DAYS_LAST_DUE | 最終提出日 |
DAYS_TERMINATION | 申請の予想終了期間 |
NFLAG_INSURED_ON_APPROVAL | 前回の申請時に保険を要求されたか? |
SK_ID_PREV | 過去のローンサンプルID |
SK_ID_CURR | ローンサンプルID. |
NUM_INSTALMENT_VERSION | 過去のクレジットの分割払いパターン |
NUM_INSTALMENT_NUMBER | 分割払い回数 |
DAYS_INSTALMENT | 分割支払い予定日 |
DAYS_ENTRY_PAYMENT | 分割支払い実績日 |
AMT_INSTALMENT | 分割支払い予定金額 |
AMT_PAYMENT | 分割支払い実績金額 |
めちゃくちゃたくさんありますね。全てを使用すると訳分からなくなりそうなので、次回は少なめに抜粋して、ベースモデルを作成しようと思います。普通に前半にある顧客情報で十分予測できそうなものですが、過去のローン実績や調査会社のデータなんかもあるので、少しは反映してみたい気もします。
ということで次回はこれらのカラムについて解析に盛り込む重要度を定めていこうと思います。