エンゲージメント向上のため、アンケートを分析！

# １．言いたいコト
**ワークエンゲージメントスコアを向上させるには、アンケートを実施するだけでは不十分です。アンケートを分析して、効果的な施策を見つけることが、エンゲージメント向上の第一歩です。**

この記事では重回帰分析を用いて、アンケートを分析し、ワークエンゲージメントスコア向上には、どんな打ち手を取るべきかを考えてみたいと思います。

大変なコストをかけて、アンケートを実施しても、全体的な傾向分析や単なる時系列比較になっていませんか？
アンケートには目的があると思います。例えば、会社であれば、組織を良くするために、アンケートを実施するのだと思います。

尊敬する杉山聡さんがワークエンゲージメントを分析しているという記事を読みました。

https://rejoui.co.jp/casestudy/3149/

ワークエンゲージメントを向上するのであれば、どのような施策が効果的かを分析して、着実に成果に結びつけることが大切であると考えます。

アンケート結果を重回帰分析することで、具体的な施策を考えるケースを考えてみたいと思います。なお、本物のデータを使って、分析したかったのですが、大人の事情があり、ダミーデータを用いました。

# ２．前提
A社とB社にて、アンケートを100人に実施したものと仮定します。アンケート項目は、５つです。以下のアンケート項目を想定し、それぞれ、５段階で評価してもらいます。（１が最もネガティブな評価で、５が最もポジティブな評価です。）

１．あなたが所属する組織のチームワークは良いですか。
２．あなたの上司は信頼できますか。
３．あなたは給与水準に満足していますか。
４．あなたの会社の福利厚生は充実していますか。
５．あなたは、会社に満足していますか。

上記のアンケート項目は、以下のように略すこととします。
１．チームワーク
２．上司への信頼感
３．給与レベル
４．福利厚生の充実度
５．会社への満足度

ダミーデータを用いて、A社とB社について分析してみることにしましょう。

分析に当たっては、重回帰分析を用います。
**重回帰分析は、「1つの目的変数」と「複数の説明変数」との関係を分析する手法です。**

ワインの価格は以下の価格で求まるという研究成果もあります。

**ワイン価格 = 前年10月～3月の降水量 * 0.0017 - 8,9月の降水量 * 0.00386 + 4 ～9月の平均気温 * 0.616 + ワインの年齢 * 0.02358 - 12.145**


Pythonを使って、重回帰分析をする場合、３種類（A.statsmodels、B.scikit-learn、C.numpy）の方法がありますが、ここでは、A.statsmodelsを使います。

# ３．ケース・スタディ１：A社のケース
まず、A社のダミーデータを使って、アンケート結果を分析してみましょう。

pandasを使って、ダミーデータを読み込みます。

```python:
import pandas as pd

df_A=pd.read_csv('dummy_data_A.csv')
df_A.head()
```
データは、下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76072/51a38efc-6680-7e56-6df2-96b53f2803b2.png)

さて、いよいよ、分析です。重回帰分析には、statsmodelsを使いますので、まず、importします。

```python:
import statsmodels.api as sm
```
今回は「会社への満足度」が目的変数です。それ以外が、説明変数ですので、説明変数だけを抽出します。

```python:
#目的変数以外を説明変数として抽出
X_A = df_A[df_A.columns[:-1]]
```
重回帰式に定数項も入れたいので、追加します。


```python:
#定数項を追加
X_A = sm.add_constant(X_A)
```
「会社への満足度」を目的変数として設定します。

```python:
#目的変数を設定
y_A = df_A['会社への満足度']
```

モデルを設定します。
OLSは「Ordinary Least Squares（最小二乗法）」の略称で、回帰分析でよく用いられる手法です。データセットにおける観測値とモデルによる予測値の差の二乗和を最小化することで、モデルのパラメータを推定します。

```python:
#モデルを生成(OLSは最小二乗法)
model_A = sm.OLS(y_A,X_A)
```
モデルを適用して、結果を表示します。
```python:
#モデルを適用
result_A = model_A.fit()

#結果を表示
result_A.summary()
```
結果は、以下の通りです。

```python:
| Dep. Variable:     | 会社への満足度           |
|-------------------:|-----------------------:|
| R-squared:         | 0.656                 |
| Model:             | OLS                   |
| Adj. R-squared:    | 0.642                 |
| Method:            | Least Squares         |
| F-statistic:       | 45.33                 |
| Date:              | Mon, 17 Jul 2023     |
| Prob (F-statistic):| 3.04e-21              |
| Time:              | 14:47:52              |
| Log-Likelihood:    | -91.502               |
| No. Observations:  | 100                   |
| AIC:               | 193.0                 |
| Df Residuals:      | 95                    |
| BIC:               | 206.0                 |
| Df Model:          | 4                     |
| Covariance Type:   | nonrobust             |

|                   | coef      | std err   | t         | P>|t|    [0.025    0.975] |
|------------------:|----------:|----------:|----------:|------:|----------------------:|
| const             | 1.2673    | 0.376     | 3.371     | 0.001 | 0.521                 2.014 |
| チームワーク       | 0.4423    | 0.078     | 5.692     | 0.000 | 0.288                 0.597 |
| 上司への信頼感     | 0.4592    | 0.087     | 5.296     | 0.000 | 0.287                 0.631 |
| 給与レベル         | 0.0014    | 0.102     | 0.014     | 0.989 | -0.202                0.204 |
| 福利厚生の充実度   | 0.0299    | 0.098     | 0.305     | 0.761 | -0.164                0.224 |

| Omnibus:          | 1.660    |
| Prob(Omnibus):    | 0.436    |
| Jarque-Bera (JB): | 1.637    |
| Skew:             | -0.301   |
| Prob(JB):         | 0.441    |
| Kurtosis:         | 2.825    |
| Cond. No.         | 45.8     |
```
ダミーデータなので、調整済み決定係数も0.642と、まずまずです。

重回帰式で表すと、以下の通りです。

**会社への満足度 = <INS>チームワーク * 0.4423</INS> + <INS>上司への信頼感 * 0.4592</INS> + 給与レベル * 0.0014 + 福利厚生の充実度 * 0.0299 + 1.2673**

**重回帰式から分かることは、A社の場合、「会社への満足度」を向上させるためには、<INS>「チームワーク」や「上司への信頼感」といったソフト面のテコ入れが重要</INS>だということです。**

# ４．ケース・スタディ２：B社のケース
次に、B社のダミーデータを使って、アンケート結果を分析してみましょう。

ケース・スタディ１と同様に、pandasを使って、ダミーデータを読み込みます。

```python:
df_B=pd.read_csv('dummy_data_B.csv')
df_B.head()
```
データは、下のようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76072/efcef5d5-f7f7-d2fd-3764-795ab87f5e9e.png)

前回同様、statsmodelsを使って、重回帰分析します。
やっていることは同じですので、説明は省略します。コメントを参照してください。

```python:
#目的変数以外を説明変数として抽出
X_B = df_B[df_B.columns[:-1]]

#定数項を追加
X_B = sm.add_constant(X_B)

#目的変数を設定
y_B = df_B['会社への満足度']

#モデルを生成(OLSは最小二乗法)
model_B = sm.OLS(y_B,X_B)

#モデルを適用
result_B = model_B.fit()

#結果を表示
result_B.summary()
```

結果は、以下の通りです。

```python:
| Dep. Variable:     | 会社への満足度           |
|-------------------:|-----------------------:|
| R-squared:         | 0.713                 |
| Model:             | OLS                   |
| Adj. R-squared:    | 0.701                 |
| Method:            | Least Squares         |
| F-statistic:       | 59.03                 |
| Date:              | Mon, 17 Jul 2023     |
| Prob (F-statistic):| 6.08e-25              |
| Time:              | 14:50:38              |
| Log-Likelihood:    | -81.513               |
| No. Observations:  | 100                   |
| AIC:               | 173.0                 |
| Df Residuals:      | 95                    |
| BIC:               | 186.1                 |
| Df Model:          | 4                     |
| Covariance Type:   | nonrobust             |

|                   | coef      | std err   | t         | P>|t|    [0.025    0.975] |
|------------------:|----------:|----------:|----------:|------:|----------------------:|
| const             | -0.6750   | 0.345     | -1.958    | 0.053 | -1.359                0.009 |
| チームワーク       | 0.1303    | 0.074     | 1.759     | 0.082 | -0.017                0.277 |
| 上司への信頼感     | 0.0208    | 0.076     | 0.273     | 0.785 | -0.130                0.172 |
| 給与レベル         | 0.3416    | 0.080     | 4.244     | 0.000 | 0.182                 0.501 |
| 福利厚生の充実度   | 0.6027    | 0.077     | 7.844     | 0.000 | 0.450                 0.755 |

| Omnibus:          | 0.205    |
| Prob(Omnibus):    | 0.902    |
| Jarque-Bera (JB): | 0.345    |
| Skew:             | -0.091   |
| Prob(JB):         | 0.842    |
| Kurtosis:         | 2.778    |
| Cond. No.         | 46.8     |
```
今回も、ダミーデータなので、調整済み決定係数も0.701と、まずまずです。

重回帰式で表すと、以下の通りです。

**会社への満足度 ＝ チームワーク * 0.1303 + 上司への信頼感 * 0.0208 + <INS>給与レベル * 0.3416</INS> + <INS>福利厚生の充実度 * 0.6027</INS> - 0.6750**


**重回帰式から分かることは、B社の場合、「会社への満足度」を向上させるためには、<INS>「給与レベル」や「福利厚生の充実度」といったハード面のテコ入れが重要</INS>だということです。**（特に、福利厚生を充実させることが望まれますね。）

# ５．まとめ
ダミーデータを使って、A社とB社を分析してみました。
**重回帰分析を用いることで、「会社への満足度」を向上させるため、A社では「チームワーク」や「上司への信頼感」といったソフト面のテコ入れが、B社では「給与レベル」や「福利厚生の充実度」といったハード面のテコ入れが、重要だと分かりました。**

<INS>アンケートは**分析**して、そして、**具体的な施策を実施**して、さらに、**目的を達成**して、ナンボの世界です。近時、ワークエンゲージメントを向上するため、各社でアンケートが実施されていると思いますが、それらを**具体的な施策に結びつけ、成果を出すために、データ分析が有効**です。</INS>

**採るべき施策は、会社ごと、組織ごとに、異なると思います。どんな施策が有効なのかを見極める上で、アンケートの重回帰分析を活用してみて下さいね。**

# ６．最後に
今回も、Chat-GPTには、大変、お世話になりました。自分自身の生産性が倍になったイメージです。本当に素晴らしい時代になったと思います。
ワークエンゲージメントについての示唆を頂きました杉山聡先生には、この場を借りて、お礼を申し上げます。
**ワークエンゲージメントWork Engagement って頭字語にすると、WE つまり、「私たち」なのですね。他人事とはせず、自分たち事として、とらえていきたいなって思いました。**
参考までに、ダミーデータも載せておきます。

dummy_data_A.csv
```
チームワーク,上司への信頼感,給与レベル,福利厚生の充実度,会社への満足度
3,5,4,4,5
4,5,3,2,5
5,5,4,4,5
4,4,5,5,5
1,3,3,4,2
2,3,5,5,3
4,4,4,4,5
3,3,3,3,5
4,2,5,5,4
5,5,4,5,5
5,5,5,5,5
5,5,4,4,5
4,5,3,3,5
3,4,5,5,5
4,4,5,4,5
5,5,4,3,5
2,3,4,3,4
5,5,3,3,5
3,2,4,3,4
3,4,5,4,5
3,3,5,5,5
4,3,4,3,5
2,2,3,4,3
3,4,3,5,5
2,3,4,4,4
3,4,5,5,4
3,4,5,5,5
3,3,5,5,4
2,2,5,4,3
1,3,5,5,2
3,4,3,4,5
2,4,3,4,4
3,3,5,5,5
3,4,5,5,5
5,5,3,4,5
2,2,2,3,3
2,1,5,4,2
2,2,4,3,3
2,2,5,5,3
1,1,4,3,1
3,4,5,5,5
4,4,5,5,5
3,4,3,3,5
3,4,5,5,5
2,3,3,3,5
1,3,4,5,3
3,4,4,4,5
3,4,5,5,5
4,4,4,4,5
4,4,4,4,5
3,4,5,5,5
2,5,3,4,5
1,2,2,2,3
3,4,3,3,5
2,1,5,3,2
3,3,5,4,5
3,4,4,4,4
3,4,3,3,5
3,3,3,4,5
2,4,3,4,5
5,5,5,5,5
1,3,5,5,3
4,3,5,5,5
2,3,3,2,4
2,3,4,5,5
3,2,4,3,4
2,3,5,5,3
3,5,4,4,5
3,4,5,5,5
2,4,4,5,4
4,4,4,3,5
4,5,5,5,5
4,3,5,5,5
4,4,3,3,5
3,3,5,3,5
1,2,4,3,2
4,3,5,5,5
1,2,3,4,1
2,3,5,5,4
4,3,5,4,5
4,4,4,4,5
3,3,2,2,4
3,3,4,4,4
2,3,5,4,3
3,3,5,5,4
3,3,4,4,4
4,4,3,3,5
3,4,4,3,5
2,4,5,5,5
1,3,4,4,3
3,5,4,3,5
3,3,4,3,5
2,3,2,2,3
2,2,5,3,3
2,3,4,3,3
2,4,2,2,4
2,3,4,3,3
3,4,3,3,5
4,4,5,4,5
3,4,3,3,5
```

dummy_data_B.csv
```
チームワーク,上司への信頼感,給与レベル,福利厚生の充実度,会社への満足度
3,4,4,5,4
4,3,3,3,4
4,5,5,4,3
3,4,4,5,5
3,3,4,3,3
3,5,4,3,3
4,4,5,5,4
3,5,4,5,4
4,4,2,4,3
2,5,5,5,5
5,5,5,5,5
2,3,5,5,5
2,4,3,4,3
4,5,3,3,3
2,2,4,4,3
4,5,4,3,3
3,4,5,5,4
4,4,3,4,3
4,4,2,1,1
4,4,4,5,4
3,4,4,4,4
3,3,4,3,3
3,3,5,4,4
3,3,4,4,4
4,4,4,2,1
4,4,5,5,5
3,4,4,5,4
4,4,4,4,4
1,2,3,2,2
2,3,5,5,4
1,3,5,5,4
2,4,4,5,3
3,4,5,5,4
4,5,5,4,5
3,4,5,4,4
1,1,5,5,4
2,2,5,4,3
3,3,5,3,4
3,3,5,4,4
5,4,3,3,3
1,2,5,5,5
4,5,4,3,3
5,5,4,4,3
2,4,5,5,4
2,2,5,5,5
3,3,5,5,4
2,3,5,4,3
4,4,5,5,5
2,4,3,3,2
4,4,5,5,4
3,3,4,4,3
2,3,5,5,5
2,1,4,5,4
3,4,4,3,3
3,2,5,4,4
4,5,4,5,4
3,4,4,3,3
2,3,5,5,4
1,2,4,5,4
4,3,3,3,3
5,5,4,3,3
2,2,3,3,2
4,4,5,5,4
3,4,3,4,4
3,3,4,3,2
2,4,4,5,5
4,5,5,4,5
4,4,5,5,5
3,4,1,1,1
2,3,2,2,2
4,3,5,4,5
3,3,2,3,2
2,3,3,4,3
3,4,5,5,5
4,4,3,3,2
3,3,4,5,5
3,4,4,4,4
5,5,4,4,4
3,4,4,3,4
5,5,5,5,5
3,3,5,5,4
2,4,3,4,3
3,3,4,4,4
1,2,4,4,3
3,4,4,4,4
2,3,2,2,1
3,3,5,4,4
3,4,5,5,4
3,4,5,3,3
2,2,5,5,4
4,3,4,4,4
3,4,3,2,3
4,3,2,3,3
3,3,2,3,1
4,3,5,5,4
2,2,4,3,3
4,4,5,5,5
3,5,4,3,3
3,4,5,4,4
3,3,4,3,3
```