学習する天然ニューラルネット

主に機械学習に関する覚書や情報の整理

ランダムフォレストと検定を用いた特徴量選択手法 Boruta

  • 特徴量選択とは
  • Borutaとは
  • とりあえず使ってみる
    • ベースラインの判別
    • Borutaの判別
  • Borutaのアイデアの概要
  • Borutaのアルゴリズム
    • 1. 判別に寄与しないはずの偽の特徴量を作る。
    • 2. 偽の特徴量と一緒にランダムフォレストを訓練。
    • 3. 各特徴量の重要度と偽の特徴量の特徴量を比較。
    • 4. 複数回比較し検定を行うことで、本当に重要な特徴量のみを選択。
  • 検定について
    • 1. 棄却したい帰無仮説と受容したい対立仮説を用意する。
    • 2. 観測値から検定統計量Tを定める。
    • 3. 帰無仮説が正しいとしてTの分布を求める。
    • 4. 十分小さい有意水準αを定め、帰無仮説が正しいときにとなる領域を棄却域とする。
    • 5. 観測されたTがに入っていたら対立仮説を受容し、入っていなければ帰無仮説を受容する。
  • まとめ
  • 補足
  • 使う際のTips等 2019/01/06追記
  • 参考

特徴量選択とは

特徴量選択(Feature Selection, 変数選択とも)はデータサイエンスにおいて非常に重要である。 Kaggle等のコンペティションではひたすら判別の精度を重要視するが、実務上どうしてそのような判別をしたのかという理由のほうが大事である(回帰問題も同様)。 例えば、なにかの製造工程をイメージしてみよう。 当然欠陥品は生じるだろうが、この欠陥品を見分けるシステムよりも欠陥品を減らせる改良のほうが良いだろう(もちろん見分けるのも大事だが)。 そこで、判別においてどのような特徴量が重要だったか選ぶことができれば、改良への糸口が見えてくるだろう。

また、特徴量選択した結果、モデルの学習や推論が高速化されたり、過学習しづらくなったり、結果判別の精度が良くなったりする。

Borutaとは

ランダムフォレストと検定を用いた特徴量選択の方法の一つである。 Witold R. Rudnicki, Miron B. Kursaらが考案。

R実装 CRAN - Package Boruta

Python実装 (バグあり。まとめ後に補足します。)(アップデートされてました pip install Borutaしましょう)

github.com

(名前の由来はスラヴ神話の森の神の名前らしいです。こんな見た目してます。)

f:id:aotamasaki:20190105193106p:plain

このBorutaという手法は経験上非常に強力で、判別や回帰の性能が著しく低下したことはない。低下しても誤差の範囲内。むしろ性能が良くなることが多い。

続きを読む

チームメイトに恵まれKaggle Competitions Expertになった日記

  • はじめに
  • Expertになるまでの戦歴
  • NBMEコンペの思い出
  • PPPMコンペの思い出
  • Masterは目指そうかな

はじめに

日記です。Kaggleを初めて2つのコンペに参加し無事Expertになったので、つれづれなるままにPCに向かひて、心にうつりゆくよしなしごとをそこはかとなく書くことにしました。 技術的に有用な情報はありません。運が強く味方してくれたため再現性はありません。

Expertになるまでの戦歴

kaggle戦歴。NBME 27位 で 銀メダル、PPPM 8位 で 金メダル。

NBME27位で銀メダル、PPPM8位で金メダルを取得したことにより、銅メダル以上2つというExpertの基準をクリアした。

これだけ見るとKaggle上手すぎぃ!次でMaster昇格か?という感じ。しかし後述するようにめちゃくちゃチームメイトに恵まれて運も良かったのが理由である。ソロだと銅メダルもかなり怪しい:pien:。

続きを読む

kaggle notebookで`pandas.read_pickle`ができない原因と対策法

  • 背景
  • 原因は二重にある
    • Pythonのversionの問題
    • Pandasのversionの問題
  • 手っ取り早い対処法
    • 自分の作業環境側
    • kaggle notebook側
  • サンプルコード
    • 自分の作業環境側
    • kaggle notebook側
  • 根本的な対処法
  • まとめ

背景

最近kaggleを始めて、困ったことに遭遇した。しかも調べても対策法を見つけられなかったため、自分の対策方法を記録に残すことにした。

遭遇した問題は以下のような状況で発生する。

  1. kaggle notebook以外の環境でpandas.DataFrameto_pickleで保存する。

  2. kaggle notebookにてpandas.read_pickleをしようとすると、以下のエラーが出て読み込めない。

    • ValueError: unsupported pickle protocol: 5
    • AttributeError: Can't get attribute 'new_block' on <module'pandas.core.internals.blocks'

本ブログでは原因を解説したあとに手っ取り早い対処方法を紹介する。

解決策だけ知りたい方は、以下の手っ取り早い対処法までスキップして頂いて問題ない。

続きを読む

Visual Studio Code 等のアプリで command + [ (open bracket) がmacOSに吸われるニッチなバグの解決

  • 状況
  • 直し方
  • 先人たちの記録と解決しない事象
  • 推測される原因
  • ついでに発見したバグ

状況

Macを初期化して再セットアップしたら、VSCodecommand + [ (open bracket, left bracketとも) が効かなくなった。 プログラミングしているときにこのショートカットを多用しているのでめちゃくちゃ困る。indentができなくなった!しかもshift + command + [のようなショートカットもすべて効かなくて困った。タブ移動もできねぇ〜〜〜〜! しかもよくよく確かめるとElectron製のアプリ全般で効かなくなってる。これは最悪である(一部は反応するけど意図した挙動でないことになった)。

もし、これを読んでいるあなたもお困りならば次に進もう。 自分の知る限り一番シンプルな解決策をここで提供する。

このバグが起こりうる環境等については後で述べる。

直し方

以下のショートカットをなにか別のものに変えた後、OSを再起動する。

システム環境設定->キーボード->ショートカット->キーボード->次のウインドウを操作対象にする

デフォルトでは以下のようになっているはずなので、⌘@から適当なもの(例えば ⌘` )に変える。(無効化しても良いかも。未検証。)

f:id:aotamasaki:20220211222838p:plain
変更すべき設定欄

続きを読む

クリックレートやコンバージョンレートといった二項母集団の母比率の信頼区間 精密法のPython実装

  • 前提
    • データ
    • 求めたいもの
  • 実装
  • 確認

前提

本記事ではクリックレート(CTR)やコンバージョンレート(CVR)といった二項母集団の母比率について信頼区間を計算するPython実装を与える。データ数が少ない状況においてはCTRやCVRだけではなく、その不確実性も考慮し比較、議論するのが望ましい。 二項母集団の母比率の信頼区間の算出方法は近似法がメジャーであるが、データ数が少ない状況においては誤差が大きくなる。ここでは精密法を用いて算出する。

本記事で求めるものを厳密に定式化するなら以下のようになる。

ベルヌーイ分布に従う確率変数がXn個存在する。X0,1のいずれかを実現値として取る。

X_1, ... ,X_n  \overset{i.i.d.}{\sim} Be(p)

現実で例えれば、広告を見た人がn人いて、それぞれの人について広告を見たら1、広告を見てなければ0ということに対応する。広告を見る確率はpである。

次に広告を見た人数をS_nとする。S_nも確率変数であり二項分布に従う。

S_n=\sum_{i=1}^{n} X_i \ \ (S_n \sim \mathcal{B}(n,p))

S_nの実現値をsとする。

データ

n回試行してs回成功した(n回表示してs回クリックされた)。

求めたいもの

\hat{p}(=\frac{s}{n})の信頼区間の上限と下限 (信頼係数 1-\varepsilon )

続きを読む

病気に備える保険にはいつ加入すべきか? 罹患の累積確率と許容リスクから考える

  • 背景
  • 早速結論
  • なぜ保証内容と加入タイミングを考えるのか
  • 何を保証すべきか?
  • いつから保険に加入すべきか?
  • further investigation is required
  • まとめ

背景

保険には入っておいたほうが良いとは聞くが、商品は膨大で何を保証すべきか、いつ入ればいいのかなど考えることは多い。

本記事では自分のメモの意味合いも含めて、

  1. 何を保証すべきか?
  2. いつ入ればいいのか?

を検討していく。

そもそものきっかけは、節税のために行った保険の契約だった。

ちなみに節税のために契約した保険とは、明治安田生命じぶんの積立という商品である。 詳しくはリンク先を参照していただきたいが、実質ただの貯金である。貯金をしながら一般の生命保険料控除で税金が安くなるという税制の穴を突いたような商品である。

ただ、契約をするには対面で生保レディーの話を聞く必要があり、ここで他の保険にも入ってもらうことが明治安田生命の真の目的である。(この商品だけ買われると多分倒産する)

そういうわけで、「じぶんの積立」だけ入るのも居心地が悪く、ちゃんと保険について検討してみようと思った次第である。 特に男性の60%が一生のうちにがんにかかる、なんて言われると他人事ではすまない。

早速結論

自分の場合は

という結論になった。 以下では、この結論に至った理由を説明していく。

続きを読む

intel macbookでスリープ中に電源が切れる問題とその解決方法

  • 概要
  • エラーメッセージ
  • 解決方法
  • 参考

概要

Intel CPUのMacbook proの電源を切った覚えがないのに、蓋を開けると電源の付く音が流れることが数回発生した。しかも決まって前回は異常終了したという警告。

そこで原因を調べ、暫定的な解決法をここにメモをする。日本語では情報が出なかったので誰かの助けになれば嬉しい。

(ちなみにIntel macの15,16インチモデルばかりに発生している様子だった。)

エラーメッセージ

自分の環境では以下のようなエラーメッセージが発生していた。

Sleep transition timed out after 180 seconds while creating hibernation file or while calling rootDomain's clients about upcoming rootDomain's state changes. と、あるようにスリープ中に異常が起きているようだ。

続きを読む

iDeCoを使用する上での注意点 ~利益を最大にするために~

概要

本記事では以下の内容について述べている。自分のメモ代わりの意味合いが大きいが、興味のある方はぜひご付き合いください。

  • iDeCoの概要
  • iDeCoのデメリット
  • 会社員はどう活用すべきか

(いろいろケーススタディなども行ったがごちゃごちゃして主張が不透明になったので没にした...)

iDeCoとは

個人型年金制度で、以下のメリットがよく主張される。

  1. 所得税と住民税が安くなる
  2. 運用期間中の利益は非課税

1のメリットが特に注目される。例えば、年収700万の会社員がiDeCoを利用して月1.2万の積立を行った場合、年に4.32万の税金の節約になる(1.2×12×(所得税20%+住民税10%))。年収や積立金額が変わらずにiDeCoを38年間(22~60歳)使うとすると、合計で164.16万円の節税となる。

2については運用利益がまるまる次の投資に使えるというメリットである(通常は約20%の税金を差し引かれる)。

シミュレーションなどを細かくしたい方のために楽天証券のリンクを置いておく。

個人型確定拠出年金:iDeCo(イデコ) | 楽天証券

iDeCoのデメリット

一方デメリットについてはまとまっている情報がないように感じる。自分が調べた限りのデメリットを以下に羅列する。

  1. 60歳まで引き出せない (家計が急変したときにリスク)
  2. 受取時には税金が発生する (退職所得 or 雑所得扱い)
  3. 口座に係る手数料が高額 (最低でも年2000円以上かかる)

1のデメリットはよく紹介されている。

2のデメリットは注目され始めたが、税制が複雑なため人によってかかる税金の額が大きく異なる。シミュレーションなどの登場が待たれる(誰も作らなかったら自分が作るまである)。 特に退職所得として受け取るときに注意が必要である。

参考までに記事を紹介する

これは有料記事 イデコ税負担、周知不足 退職金で控除枠使い切る恐れ: 日本経済新聞

こっちは無料 スタートiDeCo(3)2つの受け取り方 税負担額の比較が肝心: 日本経済新聞

3のデメリットを紹介する記事はあまりで見つからなかった。 積立金額がそのまま運用されるのではなく、それなりに高い手数料(年2000円以上)を引かれるのだ(もちろん投資信託を買えば信託報酬の費用も追加でかかる)。買付手数料0円の投資信託が流行りのこのご時世には高い費用である。さらにはiDeCoで積み立てた金額を取り崩すときにも一回につき440円の手数料が発生する。月1の年金として貰う場合は年に5280円の手数料が発生することになる。(といえ相対的に手数料はやり取りする金額に対して小さな割合なので極端に損につながることは少ないとも思う。)

手数料の一覧はこれにまとまっている いくらかかる? なぜかかる? 確定拠出年金の手数料 | りそな銀行 確定拠出年金

会社員はどう活用すべきか

  • 余裕がないうちはやらない
    • まずは当分の生活資金を貯める
    • その後の余裕資金は積み立てNISAに回す
    • それでも余裕があったらiDeCo
  • 金を突っ込むなら限度ギリギリ(12000円/月)まで
    • 相対的に管理手数料が安くなるので
  • 受取時は一時金として退職控除枠ギリギリまでうけとり、残りは年金で。年金は年1回で受け取る。
    • 大手の場合、退職金で退職所得控除の枠を使い切ってしまう可能性が高い。そのときに控除の適応されない大金を受け取ってしまうと累進課税によって高額な税金が発生しがち。年金として貰う場合でも多すぎると所得税が多くなってくるので注意。
  • 節税効果を過信しすぎるな
    • お得になった税金(積立金額で得した所得/住民税+運用利益に本来かかるはずの20%分)の半額ぐらいは受取時に払うことになると見積もっておこう(めちゃくちゃ人によって差があるけど)。

追記

なんでこういうのって書いたあとに発見するんでしょうかね。 自分のよりよくまとまってました。

horrorxzombi.com

気になるのはiDeCoを用いた場合に損をする場合があるのか、という疑問点だ。損することはほぼない。ただし本記事やリンク先で述べたようなデメリットが積み重なり、思ったより得した金額が小さかったというようなことはあるだろう。損する場合だが、例えば、22歳に1年だけiDeCoを用いてその後転職し、60歳までiDeCoに積み立てられない場合は口座管理手数料が節税効果を上回るので損をする。

このような状況以外でiDeCoを使用しても損をすることは基本的にないだろう。ただし、節税効果が思ったよりも大きくないのも把握しておくべきだ。その上で60歳まで引き出せないリスクを取れるのか自分と相談しようと思う。

さらに追記 (2021/05/30)

めっちゃわかりやすくまとめてるサイトを見つけてしまった。すごく長いが一読の価値あり。

manelite.jp