ナード戦隊データマン

データサイエンスを用いて悪と戦うぞ

マイナビの求人から求人テキストを取得し給与に対する予測を行う

テキストデータはtf-idfによってスケール化すると、容易にモデル作成ができます。ここでは、Webスクレイピングによってマイナビ求人を取得した後、「給与が500万以上かどうか」をラベルとし、スキル要件のテキストデータを特徴量としてモデルを作成し、どのようなワードが重要なのかを見てみます。

コード

In[1]:

import urllib.request
from bs4 import BeautifulSoup

url = "https://mynavi.agentsearch.jp/jobList/category/ol16/?page="

soups = []

for i in range(196):
    page = i+1
    html = urllib.request.urlopen(url+str(page))
    soups.append(BeautifulSoup(html, "html5lib"))

In[2]:

import re
import tinysegmenter

segmenter = tinysegmenter.TinySegmenter()

salaries = []
texts = []

for i in range(196):
    details = soups[i].find_all("div", class_="detail")
    for detail in details:
        salary = re.sub("\n", "", detail.find(class_="last").dd.text)
        salary = re.sub(r"[^0-9]*([0-9]+).*", r"\1", salary)
        salaries.append(salary)
        text = segmenter.tokenize(detail.find(class_="right").dd.text)
        texts.append(' '.join(text))

In[3]:

from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

salaries_binary = np.greater(np.array(salaries, dtype="float"), 500)
X_train, X_test, y_train, y_test = train_test_split(texts, salaries_binary, random_state=0)

pipe = make_pipeline(TfidfVectorizer(min_df=4, norm=None), LogisticRegression())
grid = GridSearchCV(pipe, {'logisticregression__C':[0.001, 0.01, 0.1, 1]}, cv=5)
grid.fit(X_train, y_train)
print(grid.score(X_test, y_test))
1.0

In[4]:

import matplotlib.pyplot as plt
import pandas as pd

coefs = grid.best_estimator_.named_steps["logisticregression"].coef_
coef_pd = pd.DataFrame()
coef_pd["coef"] = coefs.tolist()[0]
coef_pd["feature_name"] = feature_names
display(coef_pd.sort_values("coef"))

Screenshot from 2017-09-19 18-33-29.png

In[5]:

display(coef_pd.sort_values("coef",ascending=False))

Screenshot from 2017-09-19 18-33-48.png

説明

ロジスティック回帰によってモデルを作成しています。係数の出力が2種類ありますが、1つめが「マイナスに働く要因」で、2つめが「プラスに働く要因」です。戦略・監査・セキュリティが含まれる求人は500万円以上になりやすく、スキル・以上・システムが含まれる求人は500万以下になりやすいものになります。