どらちゃんのポッケ

R・統計・技術メモなど勉強ログ置き場

とある男性ITエンジニアが育休を取るまでの心の変遷

私事ですが、現在育児休業を取得させていただいております。私は男性なのですが、男性の育児休業は全業種平均で2.65%と、まだまだ育児休業取得の推進が進んでいません。(参考:平成27年度雇用均等基本調査

自分のこのエントリーが僅かでも、育児休業を取得しようとしている方の参考になればと、自分の育児休業を取得まで心の変遷を記しておこうと思います。

そもそも、なんで育児休業を取得しようと思ったのか

個人的な側面、仕事的な側面から育児休業を取得したいと思いました。

個人的な意味

  • 妻の体調の負担軽減と、職場復帰に向けてサポートしたい(よく、“出産は全治8カ月の重傷”と言われるし)
  • ちゃんと「育児」を知っておきたい
  • 一生に一度の経験なので、子供と共に過ごす時間を大事にしたい

仕事的な意味

  • いつか自分がマネージャの立場になった際に、チームメンバが育休を取ることになった時に、共感できるように、自分も経験しておきたかった
  • 新卒から6年間ずっと働いてきたが、少し仕事から離れて見て、大きな節目で働き方・仕事を見直すキッカケにしたかった
  • 最近、強いチーム作りに興味があり、ダイバーシティ/働き方の多様性を自ら試していきたかった

育児休業を取るまでの心の変化

ずっと前から

  • 上の理由から、なんとなく育児休業は取りたいと思っていた
  • 制度のこと、申請のこと、どこに聞けばいいんだ??と疑問に思い、徐々に制度について調べ始めた
  • 「育児休業で出世が・・・」みたいなニュースをよく見るが、幸いなことに私の周りでは、そのような印象はなかったし、多少休むぐらいで出世できないなら、そんな会社ダメだろうと思っていました

2〜3ヶ月前の気持ち

いざ、育児休業を取得をしようとしたら、結構悩んだ。選択肢が意外と多かった。「育児休業の開始と終了をいつにするのか?」「育児休業が本当にベストの選択なのか?時短は?リモートワークは?」「実際にその時になってみないと育児のツラさ/取りたいバランスが分からないよぉ・・・」などなど。

  • いつからいつまで育児休業を取得しようか、とても迷った
    • 育児休業取っても意味がなかったら悲しいので、「旦那はどの時期にいた方がいいのか?」を経験者に聞いた
    • いつ、保育園に入れるのか?(夫婦共働きなので)
    • 保育園に入れなかった時に、育児休業をもう一度取れるように、2回に分けて取った方がいいのか?
    • 育児休業のMaxで1年とるか?どうするか?
    • 育児休業ではなく、有給休暇(育児休暇)を取ればいいのではないか?
  • 育児休業中の仕事との関わり方をどうするか?

取得期間を決めるにあたって考えたこと

結局、最終的には出産から2ヶ月弱、育児休業を取得することにしました。

いろんな制度を調べたり、育児休業の取り方を考えれば考えるほど、「制度を利用して、いかにして働くか」ということがメインになってしまって、どんどん主目的である「妻をサポートする」ことから逸れていってしまっている感じがしてしまいました。なので、一番の目的は何かを強く意識して、育児休業期間を決めました。

私が意識したのは、以下の点でした。

  • 出産直後に取得したい
    • 生活のリズムが大きく変わる、慣れないことがたくさんあるであろう出産直後に育児に専念したい
  • 待機児童問題など、保育園に預けられなかった時に妻にずっと育児休業させるのもアレなので、私が育児休業を取る可能性は残しておきたい
    • 「男性に限り、妻の産後休暇内に1回目の育児休業を取得すれば、2回目の育児休業可能」という制度がある(第2 改正育児・介護休業法の解説 - 厚生労働省

      改正後は、配偶者の出産後8週間以内の期間内にされた最初の育児休業については、特別な事情がなくても、再度の取得が可能となります。

    • その制度を使えば、0歳で保育園に預けられなかった場合、妻が職場復帰し、私が育児休業という選択ができる
    • これは、上の「出産直後に取得したい」ということと矛盾しない
  • 80時間までは稼働できるように申請はしておく
    • ガッツリ働くという意味ではなく、「引き継ぎコストの方が大きいようなタスクは特に引き継ぎをせずに、自分が対応する」というにいざとなったら稼働できるようにという意味で、育児休業中の就業の申請をしました

育児休業を取る直前 の気持ち

直前に感じたのは、不安でした。仕事という居場所がなくなる。これまでの生活の大きな部分を占めていた仕事がなくなる。この変化は思ったよりインパクトがあったと思いました。女性の場合、出産が必ずあるため半強制的に休業になるけれども、男性の場合はこのような不安と戦って100%自分の意思で休業を取らないといけないということが育児休業が進まない理由の1つでもあると感じました。

  • 理解をしてくださっって、協力してくださったマネージャに改めて本当に感謝!
  • 仕事がなくなるということの寂しさ
    • 新しく来る案件が面白そうに見えて、羨ましい気持ち(隣の芝生は青い現象)
    • 自分がやってきたタスクを他人に引き継ぐこと
      • 自分ならもっとできるのにというもどかしさ(多少の自惚れ)
      • 残ったメンバに託すということ
  • 仕事場という、自分の能力を発揮する場所を失うということの不安
    • 働く(≒能力を発揮する)機会がなくなってしまい、自己効力感がなくなる不安
  • Slackとか、Zoomとかあるから1ヶ月〜2ヶ月であれば引き継ぎも簡易にして多少はいけるんじゃないかという想い

直後 の気持ち

直前とかは、「育児休業中でもできるだけ仕事を!」と思っていましたが、そんな気持ちは無くなりました。育児に手一杯だし、育児に全力をかけられる時間は大事だなと思いました。仕事を育児休業を取って本当に良かったと思います。

育児休業を取って本当に良かった!

  • 育児がスタートするとは、生活が大きく変わりすぎて、かなり負担。育児休業を取得せずに、普通に働いている人マジすげー、尊敬します。
  • 親になることに集中できたのが良かった(気持ちも、家事も、育児も)
    • 仕事のことを一切頭から離れて、子供と向き合えるということの大切さ
    • 特に、父親は「親になる」という意識がどうしても母親に比べて遅くなってしまうので、出産直後の時期に親になるということを意識できたのは、とても貴重な経験でした。
  • 何より、子供最高に可愛い

出産と同じタイミングで、いきなりリモーワークも開始するというのは、オススメしない(個人的感想)

  • 出産直後は、生活リズムも掴みにくいので、リモートワークでは中途半端になってしまっていたと思う。リモートワークという判断をせずに、完全に育児休業にしておいてよかった
  • 子供が泣き出した時に面倒をみはじめて1hとか経ってしまうこともザラで、育児とリモーワークを同時にスタートすると、そういう時に業務・非業務の切り替えができずにダメだったと思う
  • 出産直後、リモーワークで働くのであれば、事前にリモーワーク準備をして、すでにリモーワークで働くリズムを作っておくことが大事かなと思う。同時にスタートさせるのは厳しいと思う。

その他、思ったこと

  • 育児・家事、想像以上に大変。
    • 簡単ではないと思っていたけど、想像以上。
    • これはまたどこか別のエントリーでまとめたい。
  • 育児に本気出しても、多少の勉強はできる、本当に多少は(1h〜2hくらい??)
    • kerasのソースコード読んだり、DeepLearningの追いかけられていなかった部分をキャッチアップしたり、本読んだりしてます
  • 強い組織を作るという文脈では、育児休業って予告された長期離脱であるから、本質的には取得の難易度は低いはず?
    • 育児休業を所得させて頂いていて、生意気発言かもしれないですが、育児休業は予め予告されるケースが多いと思うので、育児休業というイベントは、組織体制維持において、比較的簡単なイベントであると思います。予告もなく、メンバの誰かが明日、事故にあうかもしれない。その時の体制維持に比べれば、予定された長期離脱(連絡もしようと思えばできる)というのは比較的簡単であるべきだと思います
    • また、今後、介護で離脱する人もおおくなってくると思う。育児休業だけでなく、考える必要があるなぁと。そうは言っても難しいのは、重々承知で、いかにして組織の力を強くするのかが、今後の組織の課題になっていくと思いました。
  • 育児休業の取得は、企業勤めであることのメリット
    • 雇用保険に入っていないフリーランス/自営の人では、育児休業を取っても育児休業給付金は貰えない。育児休業は、企業勤め/サラリーマンで働いていることのメリットの1つだと思います

まとめ

男性の育児休業取得は、仕事への不安と戦いながら、自ら能動的に育児休業を取りに行かないといけないというハードルがあると思います。しかし、育児休業、取って本当に良かったと思います(まだ仕事復帰してませんが・・・)。ぜひ、チャンスがあれば取得してみてください。

また、男性に対しての育休の制度/取り方などの情報が全然足りていないと思います。取得推進のためには、「取得するしないに限らず制度を説明する」・「どこに相談したらいいのかを周知する」など、人事部?の方からの積極的な働きかけが重要な気がしました。

参考になった育児休業についての資料

R markdownを使って、pythonで分析レポートをいい感じに共有したい

RMarkdownとは?

Rstudioが開発している、分析レポート作成のためのパッケージ。Markdownを拡張して、Markdown内にRのコードを記述できるようにしたもので、HTML/PDF/Wordなどに出力が可能。

http://rmarkdown.rstudio.com/index.html

どんなことができるかは、下記を見てもらえればわかるかと思います

ざっくりRmarkdownの良さを書いておくと・・・

何かデータ分析のレポートをする時に、「Excelでピポッドテーブル作ったり、グラフを作ってレポートする」「Rやpythonでグラフや計算した結果をpptに貼り付けてレポートする」というような分析レポートの作り方をしていると、元のデータソースが更新された時に、ピポッドテーブルを作り直す/pptにコピペするなど、毎回毎回手作業が発生してしてしまいます。超めんどうくさいですよね。

最近、jupyter notebookもデータ分析共有のデファクトスタンダードになってきているとは思います。しかし、jupyter notebookはソースコードとその出力が1対1対応してしまっているので、エンジニア←→ビジネスサイドの間の共有の時に「ソースコードが邪魔で見にくい、結果だけでいい」なんてこともあるかと思います。(個人的にはjupyter notebookはエンジニア←→エンジニアの間のデータ分析の共有のツールだと思っています)

そんな時に、RMarkdownが役に立ちます。Rmarkdownであれば、ソースコードを含めることも、外すことも設定で簡単にできるので、エンジニア←→エンジニアの間の共有だけでなく、エンジニア←→ビジネスサイドの間の共有にも使えると思います。

Rmarkdownでpythonも動く!?

Twitterでこう言うツイートを見かけた。

どうやらpythonが動くらしい。公式にもpythonの動かし方が書いてある。・・・ということでやってみた。

ソースコード(.Rmd)

結果

HTMLをRPubsにあげたもの

RPubs - Publish Document

PDFにした感じ

f:id:sleeping_micchi:20161009001555p:plain

・・・という感じで、まぁpythonでも動いた

はまったこと/確認したこと

virtualenv下でのpythonをRmarkdownで使う

```{python}って書いただけでは、システムのpythonを使ってしまうっぽい。自分は、もっぱらvirtualenv環境でpythonを動作させているので、なんとかしたかった。 ```{python,engine.path = '/VIRTUALENV_PATH/bin/python3',echo=FALSE}というように、engine.pathを指定すれば、virtualenvでもいけるっぽい。

参考:r - How can I specify rmarkdown to use python3 instead python 2? - Stack Overflow

pythonのimport

importするライブラリがインストールされていれば、普通にimportって書けば動く。 ライブラリが入っていない場合は、コンパイルエラーになる。

描画作成

matplotlibを試してみたが、単純にplotしただけではRmarkdownは描画してくれなかった。一度、画像として保存して読み込むというのが1つの方法らしい

参考:RStudio with python matplotlib graph - Stack Overflow

PDFで出力する際の設定

これは、pythonだからという訳ではないけどもRmdからPDF化する時に、日本語がエラーではまった。 https://kaz-ic.net/notes/20141224-rstudio-pdf を参考にさせてもらい、以下のように修正。

output:
  html_document: default
  pdf_document:
    latex_engine: xelatex
monofont: Meiryo
mainfont: Meiryo

チャンク間のメモリ共有ができない!?

Each Python chunk in an R notebook runs in a new instance of Python

http://disq.us/p/1cjg6c1

ということなので、現状pythonの場合、複数チャンクにまたがる場合(実務のレポートの場合、ほぼ100%跨ると思う・・・)、結果をディスクに吐き出して、再度読み込むということが必要らしい。めっちゃめんどくさい・・・。

まとめ

こんだけ書きましたが、最後の最後で知った事実に衝撃を受けました。Rmarkdown+pythonを実務で使うのはまだ時期尚早っぽいなと思います。Rmarkdownでpythonを使うという変化球ではなく、同じようなことがpythonのみ実装で出来たり、jupyter拡張で出来たりしないかな?と思ったのですが、あまりいいのが見つからず・・・。

唯一、良さそうなのがpython実装のpweaveでした。ただ、githubのstarは少ない・・・。今度、時間があれば触ってみようかな。

最近気になった人事組織ネタ(10/02)

VOYAGEのエンジニア評価制度の全貌。「技術力評価会」による、人が育つ組織の作り方

seleck.cc

評価制度がちゃんと考えられていて、いい会社だなと思った。社員は、評価制度に沿った行動をしてしまうと思うので、評価制度をちゃんと考えて、“運用・改善”していく組織は強くなるんだろうなと思った。

事業には当たり外れがあるからこそ、評価制度が重要

やはり事業って、中の人たちが真面目に仕事をしていたとしても、うまくいかない場合も多いじゃないですか。それでも、しっかりと取り組んでいるメンバーがいたら、そこは評価して、グレードも上げていきたいですよね。 なので、ビジネス面だけではなくて、能力面でもしっかりと評価できる制度を作るというのが、健全だと思います。

ここの考え方って、「事業を行うのための手段としての技術」という考えるのか、「技術によって事業が成り立っている」と考えるのかによって違うんだろうなと思う。どちらのスタンスを取っているのか。個人的には、「ビジネスと技術のどちらか両極ではなく、そのバランスを取ること」、「1人1人にそのバランスを変えて、納得のいく役割を与えて評価していくこと」が大事なんじゃないかと最近、思う。

しかし、評価制度を変えていくとなると、自分自身が会社の偉い人になるか、偉い人を説得するかしかないような気がするので、早く偉くなりたい(笑)

Kaizen Platform, Inc. エンジニア行動指針

medium.com

Kaizenさんのミッションステートメント。とてもいい。うちの部でもこういう行動指針を作りたい。行動指針があると、メンバーの向かう方向性が同じ方向を向きやすいと思うし、やっぱいい。

この行動指針の作り方って、どのようなプロセスで作って、メンバーの合意を得ているんだろう??そっちも気になる。全員の合意が得られないと、作ったとしても形骸化してしまうと思うので。

九州・山口 ワーク・ライフ・バランス推進キャンペーン

www.kyushu-yamaguchi-wlb.com

youtu.be

この動画でこの推進キャンペーンを知った。この動画もポスターもキャッチーで、わかりやすくていい。 実際に自分が疑似体験してみることによって、理解・共感できるようになることってたくさんあると思うから、こういう取り組みが広まって欲しい。今はまだ、この動画・ポスターはキャッチーだけど、そのうち当たり前の光景になって欲しいな。

New guide and tools to understand team effectiveness

rework.withgoogle.com

google re:workが公開しているguideが更新されたみたい?Guide: Understand team effectivenessというもので、チームが機能しているかどうか/機能させるためにどうすれば良いのか?というものがまとまっているらしい。

詳細はGuide: Understand team effectivenessを参照とのことだったけれど、ポイントは以下の5つらしい。

Psychological safety: Can we take risks on this team without feeling insecure or embarrassed?

Dependability: Can we count on each other to do high quality work on time?

Structure & clarity: Are goals, roles, and execution plans on our team clear?

Meaning of work: Are we working on something that is personally important for each of us?

Impact of work: Do we fundamentally believe that the work we’re doing matters?

  1. 心理的安全性:このチームで危険や恥を感じることなく、リスクを取ることはできるか?
  2. 互いの信頼性:納期通りに高品質の作業を行うために、お互いを頼りにすることができるか?
  3. チームの構造&明快さ:チームの目標、役割、および実行計画が明確になっているか?
  4. 仕事の意味:各個人が、個人的に重要である何かに取り組んでいますか?
  5. 仕事の影響:自分たちの仕事によって、心の底から信じているか?

これって、この前読んだ、チームが機能するとはどういうことかという本に書いてあったこととも同じ内容がポイントとしてあげられている。 ちなみ、チームが機能するとはどういうことかの私の感想はこちら。

Guide: Understand team effectiveness、ちらっと見た感じでは、とても良さそうに見えるので、ちゃんと読もうと思う。

最近気になった人事組織ネタ(9/30)

私の哲学:ヤフー株式会社 代表取締役社長の宮坂学さん

www.interliteracy.com

ヤフー株式会社 代表取締役社長の宮坂学さんのインタビュー記事。

人生は"株式会社俺"のマネジメント

自分で決めて行動する

この2つの表題、とても良い。超同意。 Softskillでも、どのように自分自身を売り込むかなどを会社をメタファーとして説明していることがあったりしたし、キャリアプランを会社のメタファーで表現することは、私も自分のキャリアプランを会社に見立てて整理しようと思っているところに、この記事。参考にさせてもらいます。

週休3日制、ヤフーが導入検討 働き方を多様に

www.nikkei.com

週休3日制はファーストリテイリングが転勤のない「地域正社員」に導入している。ヤフーも本社などで働く従業員を対象に検討を進める。

ファーストリテイリングもやっているんだ!知らなかった。副業と合わせてできれば、選択肢はかなり広がるな。それにしてもyahooは最近、いろいろ取り組んでいて凄い。

ヤフー、新幹線通勤補助を導入 月額で上限15万円

ヤフー、新幹線通勤補助を導入 月額で上限15万円 :日本経済新聞

またしてもyahoo関連の記事。yahoo飛ばしているなー。色々と。この新幹線通勤補助のニュース自体もすごいと思うけど、このTwitterのコメントが刺さったので、この記事を選んでみた。

報酬月額は制度的に知っていたけども、このニュースを見てパッと思いつかなくて、まだまだ身になっていないということを思い知らされた(まぁ、自分は人事担当じゃないからしょうがないといえば、しょうがない)。けど、人事改革を行うには、当然、人事制度を知らないといけないなーと。こういう分野をやりたいと思うなら、コツコツ調べたり勉強していくしかないなと思った。

Facebook at Work」、10月にリリースか

japan.cnet.com

コンシューマー向けFacebookと同様に、この法人向けサービスにも「ニュースフィード」「グループ」「イベント」のほか、専用の「Messenger」アプリが用意される

ちょっと気になる。Facebook、プライベートな内容でなく、ビジネス的に使っている人も多いだろうから、これはアリな気がする。Slackがはやっているけど、SlackはよくわからないけどFacebookならいいよっていう層は割と多いと思うので、どうなるのか。

ニュースフィードってどういう風に使うんだろ?イベントって社内勉強会とかに使うのかな?

レールを外れてクマムシ研究

horikawad.hatenadiary.com

少し前にあった「レールに沿った人生」を外れるということがどういうことか、そのロールモデルの1つがこれじゃないかなと思った。いろいろな世界の開拓者に、よりもっと敬意を払うべきなんだなと思った。

管理職になりたくなかった人でも得られる管理職の醍醐味

www.recruit-ms.co.jp

「そうまでして、管理職にさせたいのか?」というツッコミは置いておいて、実態をアンケート調査した結果は、なるほどなという感じ。

管理職としてのやりがい(「どういうときに管理職としてのやりがいを感じますか」)については、他の3群に比べて、「部下が生き生きと仕事をしているとき」の選択割合が飛びぬけて多い

ここの点が気になった。管理職に対する気持ちが管理職就任前後でネガティブ→ポジティブとなった、いわゆる「管理職やってみたら意外とよかった」という人は、「部下が生き生きと仕事をしていること」がやりがいに感じやすいみたい。

今回は以上!

Team Geek ―Googleのギークたちはいかにしてチームを作るのか をようやく読んだ

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

手に取った動機

読まなきゃ、読まなきゃと思っていたけど、ずっと手元に置いておきたい本ではないなと思っていて、後回しになっていた本。けど、調べてみたら、図書館にあることが分かり、図書館で借りてみた。図書館、最高!

内容

私が印象に残ったのは次の当たり・・・

  • ソフトウェア開発は、チームスポーツと同じでチームでないと開発ができない
  • チームで作業する上で、謙虚・信頼・尊敬の3つの柱が大事
    • エゴをなくす!
  • 良い文化を作るということ
    • 既存のメンバーでの強い・良い文化を作っておくと、悪い文化に汚染されにくくなる
    • 既存のメンバで良い文化を作ることが大事
    • 良い文化とは、改善に対してオープンでありながら、害を与える変化には防御的
    • 経験・価値・目標によって文化は作られる
  • ミッションステートメント
    • 文化を作る上で必要なもの
    • よくある企業のミッションステートメントは、不完全。好例としては、Making GWT betterとか
    • やること、やらないこと、方針、やらないことスコープの制限を書く
  • 個人と振る舞いは分離する
    • コードレビューの時も、チームに有害なことをしている時も、「振る舞い」を対象として、「個人」は対象にしない
  • エンジニアごとに成長に必要なもの・求めるものは違う
    • それぞれにあったもの/環境を準備するようにする
  • 有害な人に対処する
    • 時間、注意、集中を奪う人は害がある可能性が高い
  • 幸運を引き寄せる
    • 幸運な人は、作業だけに集中しているのではなく、他の情報にまで気が回っているからこそ、気がつくことができる

感想

チーム開発(特にOSSコミュニティ)でいいチームを作る時に問題となってくる対人関係をいかにしてスムーズに回すか?ということが考察された本だったなーと思う。個人的に以下の2つが読んでいて参考になった。

  • 「悪い文化が繁栄しにくいようにするためにも、良い文化を作る。文化を作る際に、ミッションステートメントは大事。新入りの人にも読んでもらうだけで、文化が伝わりやすい」
  • 「有害な振る舞いとは何か?その振る舞いをどう除外するか」

文化とミッションステートメントについて

ミッションステートメントは普段の仕事やプロジェクトではあまり意識・共有されていなかったりすると思うので、もっと意識していきたい(今の自分の部のミッションステートメントって、良く分かっていなかったりする)。

朝礼がある会社で、朝礼の最後に標語?を全員で読み上げる風景をたまにTVで見るけれども、それはミッションステートメントを定着化させるという一定の価値があるのかもしれない。

現代風にやるのであれば、Slackのローディングメッセージをミッションステートメントにして、目に触れる機会を増やすというのはいいのかもしれない。やってみよう。

そして、やっぱり、文化がどう作られていくのか?ということを勉強してみたいなと思った。今、図書館で、企業文化 改訂版: ダイバーシティと文化の仕組みを予約しているので、手元に来たら読もうと思う。

最近気になった人事組織ネタ(9/20)

伊藤直也増井雄一郎まつもとゆきひろ・白石俊平が語る「必要とされるエンジニアになるには?」

codeiq.jp

面白いパネルディスカッションの内容だと思う。生で聴きたかった。

年をとって身に染みる、「好きなことを仕事にしよう」という若者へのアドバイスの大切さ

blogos.com

とても面白い考察のエントリーだと思った。

技術者や研究者に限らないかもしれませんが、年を取っても価値を出せる人は、好きな事、得意な分野で、若いとき以上に馬車馬になって働いているのではないでしょうか。

急速に変わる技術や環境についていくには、若い時以上の努力をするのが当然で、過去に実績がある人でも、油断して努力を怠ったら、引退や失職に追い込まれるのは、スポーツ選手だけではない。

加齢による衰えで体力的にも、家族ができるなどの理由で時間的にも、work hardするのは難しくなっていく中、本当に好きなものを見つけて努力を続けるというのは思ったよりも大変だなと、30歳手前にして想像している。

また、自分もそうですが、年を取るにつれてこだわりが強くなり、好きな仕事しかやりたくない、この仕事は嫌だとなりがちになります。それが周囲の環境と合わなければ、ただの「使えないおじさん」になるわけです。

この辺りが心に刺さった・・・。自分は5年、10年先を意識した年の重ね方をする年代に差し掛かって来ていると思うから、一度、整理しておこう。

「なぜあなたの研究は進まないのか?」「なぜあなたは論文が書けないのか?」の2冊が素晴らしかった

yumulog.hatenablog.com

この2冊ですね。

なぜあなたの研究は進まないのか?

なぜあなたの研究は進まないのか?

なぜあなたは論文が書けないのか?

なぜあなたは論文が書けないのか?

パッと見、研究だけでなく、自分の専門性のテーマ設定とか、いろいろな所に応用できそうなので、読んでみようかと思います。

第1回 HRテクノロジー大賞

www.hrpro.co.jp

日本のHRテクノロジー、人事ビッグデータ(アナリティクス)の優れた取り組みを表彰することで、この分野の進化発展に寄与することを目的に、今年創設されました。

・・・ということで、今年から始まった人事系の取り組みのアワードらしい。いわゆる人事系パッケージとか、クラウドとかが主流で目新しさがないなーと思ったけども、テンプホールディングスの 退職者予測モデルの構築 と、 NECソリューションイノベータのビックデータ分析技術を活用した職場におけるメンタルヘルス不調者予防、職場環境改善の取り組みが気になった。

機械学習とか、どのぐらい精度でどの程度のビジネスインパクトがあるものなんだろうか?うちの社内でもやりたい。 人事×ビッグデータやりたい。

本社移転にあわせ、東京本社勤務の全従業員約5700名を対象に机を不規則に配置したフリーアドレス制の導入や、社外の方も利用できるコワーキングスペースを新設

pr.yahoo.co.jp

従業員と社外の人が情報交換や新たな協業を生み出していける仕組みとして、コワーキングスペースを設置したらしい。これは良い取り組みだなー。フリーランスで素晴らしいエンジニア

あと、もう一つのこっちの方も良い。 働きやすい社内風土を醸成するため、有志を中心とした社内プロジェクトを執行役員がサポートする「スポンサーシップ制度」を導入 どのくらい実際の効果が発揮されているのかはわからないけれども、執行役員レベルが、働きやすい社内風土のために責任を持って動いているというメッセージが良い。

今日は以上!

kerasでirisの分類をやってみたメモ

(注意)ただ、私が自分自身のkerasの学習のために書いたメモです。このエントリには、何も新しいことはありません。

kerasとは

kerasは有名なので、そんなに説明はいらないかと思うけれども、Pythonの深層学習ライブラリ。TensorflowやTheanoのラッパー的な位置づけで、ネットワークのモデルを簡単に記述できるフレームワーク。Caffeとか、Chainerとか、動かしたことあったけど、Kerasはなかったので、最近評判がいいと噂のkerasを触ってみることに。触った感じもめちゃくちゃ分かりやすいので、研究用途でなく、私みたいな深層学習との向き合い方をしている人には、keras最高じゃないかなと思います。

最近、ドキュメントが日本語に翻訳されているので、とても読みやすい。

Chainerとか、他のフレームワークとの比較は下記のSlideshareが何となく分かりやすい。

Deep Learningライブラリ 色々つかってみた感想まとめ // Speaker Deck

簡単なコードの説明

有名なirisの分類問題をkerasでやってみました。 ちなみに、バックエンドはtensor flowで実行しています。コードの全部は、gistに貼ってあります。

データの準備:irisデータ読み込み

from sklearn import datasets
iris = datasets.load_iris()
features = iris.data            #特徴ベクトル
targets = iris.target           #分類ラベル
  • ちなみに、featuresとtargetsのデータ構造像はこんな感じです

features

array([[ 5.1,  3.5,  1.4,  0.2],
 [ 4.9,  3. ,  1.4,  0.2],
 [ 4.7,  3.2,  1.3,  0.2]・・・

targets

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

kerasに必要なものをインポート

from keras.models import Sequential
from keras.layers import Dense, Activation

モデルの設定

model = Sequential()
model.add(Dense(12, input_dim=4))
model.add(Activation('relu'))
model.add(Dense(3, input_dim=12))
model.add(Activation('softmax')) 
model.compile(optimizer='SGD',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
  • 上記で書いたモデルはこういう感じになります

    • 入力層:4次元
    • 隠れ層:12次元
    • 出力層:3次元(3クラス分類問題のため)
    • 各層の間の結合:Dense(全結合)
    • 入力層→隠れ層の活性化関数:relu
    • 隠れ層→出力層の活性化関数:softmax
    • 最適化:SGD
    • 損失関数:sparse_categorical_crossentropy
  • 図に表すとこんな感じ

    • f:id:sleeping_micchi:20160915003336p:plain

学習

model.fit(features, targets, nb_epoch=20, batch_size=5)
  • kerasでは、こんな感じで標準出力に学習途中の結果を出してくれます
  • さらにkerasのバックエンドをtensor flowにした場合は、結果をtensorboardでみることができます
    • modelとかにcallbackを指定してあげる必要はあります
Epoch 1/20
150/150 [==============================] - 0s - loss: 1.2433 - acc: 0.5067     
Epoch 2/20
150/150 [==============================] - 0s - loss: 0.6935 - acc: 0.6733     
Epoch 3/20
150/150 [==============================] - 0s - loss: 0.6501 - acc: 0.7000     
Epoch 4/20
150/150 [==============================] - 0s - loss: 0.6012 - acc: 0.6733     
・・・(以下略)・・・

学習モデルで予測

model.predict(features, batch_size=10, verbose=1)
  • 上記で学習したモデルにデータを入れたときに、どういう予測をするのかを返えす
  • だた、今回は、kerasの動きを見たかっただけなので、全部学習データとしてつかっているので。なので、あまり意味はなくなっています。本来であれば、データを学習用とテスト用に分けておきます。

  • ちなみに、こんな感じで出力されます。今回は3クラス分類問題なので、3次元で出力されます。

array([[  9.78549898e-01,   2.12393254e-02,   2.10749422e-04],
  [  9.49374020e-01,   4.98638190e-02,   7.62094394e-04],
  [  9.69367325e-01,   3.02073583e-02,   4.25341772e-04],
  [  9.45379853e-01,   5.37167825e-02,   9.03351058e-04],
    ・・・(以下略)・・・

学習モデルの評価

model.metrics_names
model.evaluate(features, targets, batch_size=10)
  • 本来であれば、交差検定をやるべきなんですが、kerasの動きを見たかったので、交差検定やってません。
  • なので、これは今回は動きを見る程度です

その他:いろいろやってみて思ったこと

損失関数の設定をまちがってやってみると・・・?

モデルの記述のところに、 sparse_categorical_crossentropyではなく、 categorical_crossentropyと記述してみるとこんな感じに例外となった。

model = Sequential()
model.add(Dense(12, input_dim=4))
model.add(Activation('relu'))
model.add(Dense(3, input_dim=12))
model.add(Activation('softmax')) 
model.compile(optimizer='SGD',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(features, targets, nb_epoch=20, batch_size=5)
  • 例外部分
Exception: Error when checking model target: expected activation_22 to have shape (None, 3) but got array with shape (150, 1)

モデルのチェックでおかしいよと例外が飛んでいるのがわかったが、損失関数の設定がマズいと気づくのに少し時間がかかってしまった。もう少し、丁寧なメッセージだとありがたいが・・・。ちなみに、 categorical_crossentropyは、数字ではなく、文字でのラベリングデータに使用するみたい(kearas_available-objectives)。

モデルのテストどうするんだ問題

上の損失関数の設定ミスでは、例外が飛んでミスとわかったが、ネットワークのモデリングについては、間違えても例外が飛ばず、自分のモデルの記述ミスに気がつかないケースもあって注意が必要だなと思った。

たとえば、irisは3クラス分類なのに、なぜか私は最初4クラス問題だと思い込んでしまっていて、最後の出力層の次元を4次元と設定していた。accuracyがちょっと上がりにくいなーと見直してようやく、自分のミスに気がついた。このようにミスがあっても、それでも何となくは動いてしまうので、テスト(品質保証の方)が難しいなーと思った。

活性化関数とか、モデルどうするんだ問題

初めのirisぐらいなら、雑に組んでも学習できるでしょと舐めきっていて(ごめんなさい)、単純にコードとしてkerasで組むことだけを考えていたので、ネットワーク設計は微塵も考えずに、relu使っておけばいいやと、隠れ層・出力層の活性化関数ともにコピペでreluに設定していた。

けれども、reluだと全然学習がうまくいかなかった。 このようにモデルを設定して、学習させたらacc: 0.3600 までしかいかなかった・・・。

model = Sequential()
model.add(Dense(12, input_dim=4))
model.add(Activation('relu'))
model.add(Dense(3, input_dim=12))
model.add(Activation('relu')) model.compile(optimizer='SGD',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(features, targets, nb_epoch=20, batch_size=5)

ちなみに、出力層がsoftmaxとreluではこのぐらい違った。

  • 出力層がsoftmax
    • loss: 0.2591 - acc: 0.9667
  • 出力層がrelu
    • loss: 0.6949 - acc: 0.3600

多クラス分類の出力層にになんで、relu使っているんだ!?という疑問はおっしゃる通りなのですが、雑にネットワークモデルを組んで動かしても、精度がでないということは今後注意しておきたい(今までこの現象にあたってこなかったのは、単純に私の経験値不足かもしれないが)。

今回、kerasの実装を追いたいということで、モデルを考えずにreluをつかったけれど、DNNをやるときはそれではダメで、実装とネットワークモデルはセットにして考えないといけない(むしろ、ネットワークを先に設計してから、実装する方がいい)ということを再認識させられた。

ちなみに、2クラス分類、多クラス分類、回帰などの使い分けは機械学習プロフェッショナルシリーズの深層学習に載っていたりするが、下記を参考にしてもといいと思います。

www.slideshare.net

それにしてもKerasは直感的に記述できて、分かりやすい。研究でなく、動かしてみたいというのであれば、ほぼkerasでいいのではないかと思う。