St_Hakky’s blog

プログラミング/心理学/人事/留学/データサイエンス/機械学習/Deep Learning/バイオインフォマティクス/日頃思ったこと/人事のデータサイエンスしてみたい

「採用学」を読んだ

こんにちは。

「採用学」という本を読んだので、その本についてまとめておく。

○読んだ本:「採用学」

今回読んだのはこの本。


○本の内容と感想

この本は、採用を科学するという立場をとって研究をされている服部先生の本で、中身もできる限り事実を元に説明されているように感じた。「採用」に対する考え方を体系化し、企業が採用を考えるときにどのようにアプローチするべきかというのが、事例なども合わせて紹介されていた。

僕個人としては、採用を行うときに考えるべきポイントは何かという点でこの本を手に取ったし、具体的な手法の普遍化はできなくても体系化まではどの企業にも当てはまるものが作れると思っていたので、その意味でもすごく参考になった。

また、体系化してこれらの理論を作れるようになれば、現在のIoTやデータサイエンスの技術を使えば、
・雇用従事者の離脱予測
・雇用従事者のタスク/コミュニケーション量の観測
・応募者の人物要件の分析、測定
・社内優秀人材の人物要件の定義、測定
などが可能になる(と思っている)。

実際に、少しではあったがそのような取り組みをしている企業の例もあった(Googleとか)ので、またその手の本を読んでみようかなと思う(僕の興味はどっちかっていうとそちらにあるので)。

本の中身で取り上げられていた、以下の式があった。詳しくは本を読む感じで、ここでは深く説明しないけど笑

採用力 = 採用リソース(有形/無形) × 採用デザイン力(採用設計力/オペレーション力)
採用リソース(有形/無形):資金、人員、企業/採用自体のブランド
採用デザイン力:採用プロセスなどを組み立てる力

これはすごく共感する部分があった。掛け算になっているので、中小企業やベンチャー企業といった資金に比較的乏しくなってしまう立場にある企業は、この点で優秀な人材の確保という点では、不利になる。

ここの掛け算をどう解決していくかということが、ポイントになるだろうし、面白い部分でもあり、大型の企業によく見られる採用時のデータ活用を小さい企業に適用するという点で、とても楽しいなぁと思った。

www.works-i.com

HR系のテクノロジーは上のサイトにもあるように発展してきてはいるけれど、まだ人物要件の定義という観点ではアンケートといったレベル感でしかないと思う。中小企業やベンチャー企業においては、どうしても複数業務を兼任するという形になるので、一歩採用力という意味で遅れるし、採用が失敗した時のダメージが大きく出てしまう。

そのため、ここを打開する意味で、人事/採用におけるデータ化/モデル化みたいなところを実現するべきだし、以下の文章にもあるように、そのような例はまだ大手企業が多いようだけど、すでにある。

急発進する人事×データ
http://www.works-i.com/pdf/w136_toku2.pdf


データ、楽しいですね。この本はとても良かったです。他にもこのタイプの本を読んでみようと思います。

それでは。

勾配降下法について調べてまとめてみた

こんにちは。

今までなんとなくなーなーで勉強していたGradient Descentですが、ちゃんと調べて見ました。

OverViewの論文があって(元はブログの投稿なので、これはそうというのかわからないけど)、今回それを読みつついろんな資料を漁る方式で勉強しました。

○読んだ論文とスライド

最近自分で話そうと思ってまとめるといい感じで頭に入ることを学習したので、しっかり読もうと決めたものは資料にしています。笑

■一言まとめ

めんどくさかったら、とりあえずAdam使っとけってことですね笑。ただ、Adamだと汎化性能がSGDに比べて落ちるという研究もあるので、各種ハイパーパラメーターをAdamで探索後、最終的なTuningのフェーズになったら、SGDを使うのがいいかな、と考えています。

○Gradient Descent周りの参考資料の一覧

上記の論文とスライドを読むときに参考になったのが以下の資料です。

■Nadam

Effective python シリーズ4:Write Helper Functions Instead of Complex Expressions

こんにちは。

○読んでいる本

以下の本を勉強がてら読んでいます。

www.effectivepython.com

ここにある通り、Pythonプログラムを改良する59項目が掲載されています。詳細は本に書かれているので、それを読めば良しとして、大事そうなところと、これに関連して勉強したことを書きます。

まとめページは以下より。

st-hakky.hatenablog.com


さて、今回は4つ目:「Write Helper Functions Instead of Complex Expressions」をやります。

○Write Helper Functions Instead of Complex Expressions

今回は「あぁ、適当にコード書いているときはよくやりがちがなことだなぁ」って感じの内容でした。

  • 代入する式や処理が1行で書くには複雑になってきたと思ったら、ヘルパー関数を作成した方がいい。
  • 読みやすさで得られる利益は常に、簡潔さがもたらした便益を上回る
  • Pythonは特にそう言った複雑な処理を1行でかけちゃうので、注意していこう

今回はこれで以上で。

Effective python シリーズ3:Know the Differences Between "bytes", "str", and "unicode"

こんにちは。ちょっと期間が空いてしまいましたが、今日も頑張る。

○読んでいる本

以下の本を勉強がてら読んでいます。

www.effectivepython.com

ここにある通り、Pythonプログラムを改良する59項目が掲載されています。詳細は本に書かれているので、それを読めば良しとして、大事そうなところと、これに関連して勉強したことを書きます。

まとめページは以下より。

st-hakky.hatenablog.com


さて、今回は3つ目:「Know the Differences Between "bytes", "str", and "unicode"」をやります。

○Know the Differences Between "bytes", "str", and "unicode"

Python2と3で大きく違い、混乱するこの文字列の表し方。表にまとめると以下のようになります。

文字列の表し方 8ビット値を含むもの Unicode文字を含むもの
Python2 str, unicodeの2種類 strインスタンス unicodeインスタンス
Python3 bytes, strの2種類 bytesインスタンス strインスタンス
Python2 Python3
byte型 str("") bytes(b"")
通常の文字列 str ('') str ('')
unicode文字列 unicode(u"") str ('')

2系から3系に移った際に、3系で文字列は全てunicode型で扱われるようになったので、このあたりはいい感じになったのですが、まぁわかりにくいですよね笑(もう3系だけ覚えればいいんじゃね笑)。

■とにかく覚えること

以下の3つを覚えればおけ。

  • インターフェースの一番外側の境界線で、Unicodeの符号化と復号化をして、プログラムの内部ではUnicode型を使うようにする
  • プログラムの核心部分では兎にも角にもUnicode文字型(2系:unicode、3系:str)を使う
  • 絶対にプログラム内部で文字の符号化うんちゃらを考えないこと

つまり、Unicode型(2系ならunicode、3系ならstr)を黙って使えば問題なし笑。

■3系でのstr(つまりunicode)とbytesの行き来

重要なこととして、2系と3系は共通してunicodeインスタンスがバイナリ符号化を伴っていないので、例えばバイナリに変換したい時(UTF-8符号化など)には、encodeメソッドを使わないといけませんし、逆にバイナリデータをunicode文字に変換したい時にはdecodeメソッドを使う必要があります。

僕は基本的に3系を使うので、3系だけメモ。

  • encode => str→bytes
  • decode => bytes→str

参考:

■型を判定して一定の型を返す時に使うためのヘルパー関数

これはすごい便利ですね。以下に乗っています。

effectivepython/item_03.py at master · bslatkin/effectivepython · GitHub

■その他

この本の中身を理解するにあたって、以下の情報は役に立った(参考情報も含めて)。

Python3系が内部でunicode型のみを扱っているので、外に出力する際にbytesに変換したい場合はそうする必要があるので、Python3系ではこれをencodingって引数を持って、自動でやってくれているということも大事ですね(macで書いたコードをwindowsで実行しようとすると大抵このエラーが出てきてため息つく笑)

それでは今日はこんな感じで。

Effective python シリーズ2:Follow the PEP 8 Style Guide

こんにちは。

○読んでいる本

以下の本を勉強がてら読んでいます。

www.effectivepython.com

ここにある通り、Pythonプログラムを改良する59項目が掲載されています。詳細は本に書かれているので、それを読めば良しとして、大事そうなところと、これに関連して勉強したことを書きます。

まとめページは以下より。

st-hakky.hatenablog.com


さて、今回は2つ目:「Follow the PEP 8 Style Guide」をやります。

○Follow the PEP 8 Style Guide

デッ、デタ!PEP 8ですね。

www.python.org

ちゃんと読む。割と文字が多すぎるよ系のエラーが辛い。笑

■Zen of python

Pythonの心得的なやつでしょうか。

import this

って打つと、「Zen of python」が出てきます笑。

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

○PEP 8 checker

pep8というパッケージがあり、これによってpythonコードがPEP 8に従って書かれているかどうかがわかります。pipでインストールが可能です。

pip install pep8

使い方は普通に、コマンドラインから、

pep8 file_name.py

みたいな感じでできる。

・参考
pep8 1.7.0 : Python Package Index

○PEP 8をAtomで使う

僕は、Atomを使っているので、PEP8をAtomのエディタ内で使えるものがあれば便利だなと思って探して見ました。以下が入れたもの。

■atom-pep8

普通にインストールして使えばおk。

■linter-python-pep8

普通にインストールして使えばおk。

■linter-pycodestyle

これを使うために、事前にpipでインストールする必要があるみたい。

pip install pycodestyle
python-autopep8

以下の「python-autopep8」が、自動でpythonのファイルをpep8に準拠して整形してくれるツール。

python-autopep8

atomでこのパッケージを使うようにするには、pipでまずautopep8を入れる必要がある様子。

pip install autopep8

Atom Beautifyと組み合わせて、使えばpep8に自動で変換するだけではなく、コードも自動で整えてくれるので、便利。

プログラムを整形して見やすくする Atom Beautify | Lonely Mobiler

以上。