年収に効く要素とは何か

Getting Started

年収を表現するには様々なものから予想する必要があります。

新卒での就職や、中途での就職にはどのような方法で選ぶのでしょうか。

働き方などもあると思いますが、一つ重要な要素として年収(給与)の大きさがあるかと思います。

DoDaさまという転職サイトには大量の求人が記されており、この説明文から給与を予想することで、どのようなことが年収に影響をおよぼすのか、定量的に確認していきたいと思います

アルゴリズム

ElasticNetを利用します。単語ごとに重みをつけるBag of Wordsを利用しようと思います

精度自体はさほどではないですが、解釈性がよいので、見通しが立てやすく、LassoとRidgeの双方の正則化項を利用します(ゴミみたいな情報が多いので正則化項は重要です)

予想精度自体はGBMやDeep Learningのほうが当然いいのですが、解釈を求めていきます

コード

一連のコードはGITHUBからダウンロードできます
https://github.com/GINK03/income-expression

コーパスの作成

コーパスは、別プロジェクトのスクレイパーの機能を利用します

$ git clone https://github.com/GINK03/scraping-designs/
$ cd scraping-designs
$ cd doda-scrape
$ python3 scrape.py

HTMLの解析

年収が記述されたフィールドは固定的なので、正規表現等を用いて抜き出すことが可能です

$ python3 10-scan.py
(testというディレクトリに必要な要素が記されます)

分かち書きと、データセットの作成

今回は表現に単語とその出現回数を用いてベクトルを構築して、予想しようと思います

最初のステップとして単語ごとにidを振ります

$ python3 make-sparse.py --step1

ElasticNetで処理できるように、numpyのarrayを作成します

$ python3 make-sparse.py --step2

パラメータの探索と、学習

ElasticNetは結構動かすパラメータが多いのですが、グリッドサーチし易いので、αとl1の大きさを可変にしてGrid Searchを行います
testデータでの誤差を最小化するパラメタがモデルに記されます

$ python3 elasticnet.py

(48GByteのメモリのマシンでギリギリです)
mean absolute errorを計算することでモデルの汎化性能を見ます

mae=00000065.696695865_alpha=0.1000_l1_ratio=0.2000

このときmae(mean absolute error)が65万円で65万ぐらいはずれるけどだいたい行けたって感じです

最良のモデルから、特徴量重要度を見ていく

$ python3  best-param-scan.py | less

実際に計算した内容を示すと以下のようになります

マネジメント 18.381396825012754
歩合 14.136117145490859
候補 13.415671954541189
契約 10.633767996153344
稼げる 10.404505087506644
+ 10.30732826774959
部長 10.152909358186502
収入 9.806592682058445
マネージャー 9.704810884773616
英語 9.421044629797384
管理監督者 9.235432398298917
年収 9.210028472698683
課長 9.07549400767956
商談 8.988719728745945
高率 8.213402666993424
管理職 8.189080396494985
転職 8.155156197596641
日本 8.073732572758566
ね 7.377261889211694
物件 7.328660432827618
投資 7.101509264292014
万 6.819871907447121
仕組み 6.784620157741977
インセンティブ 6.764353422613882
不動産 6.731659271299003
くれ 6.582004114285033
自信 6.558282474759441
新築 6.4900233558596225
以上 6.381324013280269
レベル 6.367740255782417
活躍中 6.276740342933098
構築 6.247725916521742
策定 6.131843848437284
含む 5.980037348891687
完全 5.884914709363732

これらの単語が含まれていると、高収入が期待できます。(マネージメントが一番強い)

逆にネガティブに働くものはこんな感じです

積極的 -5.252038994898416
大切 -5.262670556958283
高等学校 -5.309553157634449
ヒアリング -5.581001714390951
所定 -5.606582162252535
教室 -5.761500395033308
不問 -5.837262417330616
店長 -5.924920026296953
条件 -5.9450967582272085
正社員 -5.970355741404491
制 -5.995422955410039
キャリアパス -6.073649994402703
育休 -6.14922056111198
社会人 -6.171230212052192
PC -6.195164512902161
短期大学 -6.223481582931793
登用 -6.378367448084286
手当 -6.4973649285751005
ステップアップ -6.541287715637883
契約社員 -6.8149013193897
店舗 -6.861519856253179
普通自動車 -7.469775262947728
シフト -7.625101881814313
歓迎 -7.720352090742413
事務 -9.284846866158098
休日 -9.416569308243343
未経験 -9.848916667554974

お気持ち系が多いですね

ダンプしたファイルを添付するので、時々、年収アップには何をすべきのか、よく確認したいです

おまけ(東京、大阪、名古屋で年収の分布はどうなっているの?)

以下のコマンドで雑ですが色々分布を見ることができます

$ python3 50-verb-pair.py

大阪やばいっすね。一人だけ左側にずれています。