📐

「プログラミング未経験者がWeb/ITエンジニアに転職するためには何をしたらいいのか?」を統計的に分析してみた

2022/05/12に公開

1.イントロダクション

こんにちは。セイトと申します。

社会人で未経験からWeb/ITエンジニアへ転職する流れが数年前からトレンドになっている昨今ですが、ネット上では転職に成功した人もいれば失敗した人の声もよく耳にします。
どんな人が成功して、どんな人が失敗するのでしょうか?

学歴が大事だとか、勉強期間3ヶ月じゃ足りないとか、30歳越えたらキツい、などといったもっともらしい意見は耳にするものの、実際にはどうなんだろう?と常々感じておりました、

そこで、この疑問に客観的に答えるべく統計学で考えてみた、というのが本記事の趣旨です。
なるべく噛み砕いて説明するので、最後までお付き合いいたけたら幸いです。

【目次】

  1. イントロダクション
  2. データセット
  3. 分析方法
  4. 分析結果
  5. 議論
  6. 付録

2.データセット

本調査を行うに当たり、SNSは上でアンケートを実施しサンプリングを集めました。概要は以下の通り。(協力してくれた皆様ありがとう!)

  • 対象は「2015年以降に社会人でプログラミング未経験からITエンジニアへの転職に成功した人」
  • TwitterとYouTubeを用い、Googleフォームに回答いただく形で集計
  • 新卒は対象外
  • ITエンジニア=コーディング業務を含む開発者のポジションであること
  • 有効回答数205人

アンケートでは、転職成功率に影響を及ぼしているのではないかと予想される変数5つについて尋ねました。すなわち「年齢、応募数、最終学歴、プログラミングスキルの学習時間、内定獲得数」の5つです。

age entry final education study load job offer
27 30 1 600 1
34 50 0 600 2
35 5 1 1200 1
29 70 0 65 1
... ... ... ... ...

図1. 調査に使用したデータセットの一部(年齢 = age, 応募数 = entry, 最終学歴 = final education, 学習時間 = study load, 内定獲得数= job offer)

なお、アンケート結果を分析しやすくするために以下のようにデータを整形しています。

  • 勉強時間に関しては正確に思い出してもらうことは現実的に難しいと考え、「100時間未満、101~300時間、301~500時間」というようにある程度幅を設けて解答をいただきました。
  • 企業への応募数に関しても正確に思い出してもらうことは現実的に難しいと考え、「1~10社、11~20社」というようにある程度幅を設けて解答をいただきました。
  • 学歴に関しては具体的に大学名を記入してもらったものの、分析が煩雑になるため「大学中退以上 or それ以外」の二択に再編集しました。(※R言語で分析しやすくするためそれぞれ0,1を割り当て、カテゴリ変数としました)
  • ネット上に存在しない大学名を記入していたり、内定数が10を超えるなど極端な外れ値のデータは信憑性がないと判断し削除しました。(210件中5件)

3.分析方法

本調査では、主に単回帰分析、重回帰分析、ロジスティック回帰分析を用いました。これらの分析を通じて解明したかったことは以下です!

  • 学歴、年齢、年次、エントリー数は内定数や内定率に影響を与えるか?
  • 応募者が内定を得るまでに、どれくらいの期間プログラミングおよび開発スキルを勉強する必要があるのか?

3.1.回帰分析

最初の調査では、集計されたデータをもとに、「内定数」を従属変数、その他の変数を独立変数としました。
要するに、内定数に影響を与えている変数が果たしてあるのかどうかを調べました。結果は下記の通り。(コードは本記事の下部、付録Aを参照)。

Estimate Std.Error t-value p-value
age -2.74E-02 2.21E-02 -1.237 0.217436
entry 1.47E-02 4.40E-03 3.345 0.000985
final.education 1.37E-01 1.93E-01 0.709 0.479274
study.load -6.16E-05 2.49E-04 -0.247 0.804935

図2. 重回帰の係数

その結果、「entry(応募数)」のみp値が0.05以下で有意差が認められました。要するに 「応募数」の数は「内定数」の数字に影響しているといえそう 、ということです。
しかし応募数と内定数が比例関係にあることは分析するまでもなく容易に想像がつくため、この結果には正直目新しさを感じません。

3.2.ロジスティック回帰分析

そこで分析方法のアプローチを変えてみることにしました。
「内定数」を「内定率」に変換し、内定数1件以上なら合格(=1)、内定数1件未満なら不合格(=0)というカテゴリー変数にしました。その上で、「内定率」の合否を従属変数、その他の変数を独立変数とし、ロジスティック回帰分析を行いました(コードは本記事の下部、付録Bを参照)。

要するに、さっきは内定数に影響を及ぼしている変数を探す分析を行ったわけですが、面白くない結果に終わったので、内定数ではなく内定率を見る分析で別の結果を得られないかと期待したわけです。

Estimate Std.Error t-value p-value
age -4.54E-02 5.23E-02 -0.868 0.3852
entry 2.30E-02 1.62E-02 1.423 0.1547
final.education 4.19E-01 4.97E-01 0.843 0.3992
study.load 1.44E-03 6.89E-04 2.085 0.0371

図5. ロジスティック重回帰の係数

その結果、「勉強時間(study.load)」のみがp値0.05%以下で有意であることが判明しました。
つまり、 「勉強時間」は内定率に関係してそう 、ということです。
念の為、他の不要な変数を除外し、「勉強時間(study.load)」のみを従属変数として再度ロジスティック回帰を実施した結果も載せます。

Estimate Std.Error t-value p-value
study.load 1.33E-03 6.77E-04 1.959 0.0501

図 6. ロジスティック単回帰の係数

その結果、「勉強時間(study.load)」のp値は0.05をわずかに超えたものの、微々たる差なので有意と考えることにします。
しかし一方で、決定係数 (R-squared) は0.05028を記録しました。(詳しくは後述)

4.分析結果

ここまでの分析で注目すべき結論は2点あると考えます。
1つは、今回の調査では 「年齢と学歴は内定数および内定率に直結しない」 という結果になったことです。
一見すると関係がありそうですが、実際には回答者の内30代・四大中退未満の学歴で内定を獲得した人も複数確認でき、結果から見ても関連性や有意性はないと結論づけられました。(45歳以上の回答者はいなかったため、それ以上の年齢層に関しては不明です)

2つ目は学習時間についてですが、こちらは少々解釈が難しいです。
p値0.05以下で有意差はあるものの、決定係数 (R-squared) は0.05028と極端に少ない値です。
有意差があることから、勉強時間と内定率には相関性があるといえるものの、決定係数の低さから勉強時間は内定率を十分に説明できていないことになります。

つまり、「勉強時間が長い人は内定率も高くなる傾向があるが、それ以外の要素も大きく影響している可能性があり、単に勉強時間だけ増やしても内定率が上がるとはいえない」 ということです。
たしかに、実際の選考プロセスにおいて面接官は応募者の人柄、面接時の受け答え、ポートフォリオの出来栄えなど複数の要素を複合的に判断すると予想されるため、勉強時間に限らずその他の変数も総合的に向上させる必要があると推測できます。

当たり前のように聞こえるかも知れませんが、これから未経験からWeb/ITエンジニア転職を目指す場合はコーディングの勉強だけでなく、面接対策や書類の準備など自身の能力を総合的に底上げする必要があるといえます。

なお、データセットから内定者のみのデータを抽出した結果もぜひ紹介させてください。

  • 平均年齢:27.3歳
  • エントリー数:20.2社
  • 学習時間:530.8h
  • 平均内定数:1.9社

目安として、Web/ITエンジニアを目指す方は少なくともこれらの数字に届く努力を積むことで、成功率を上げることができるのではないかと予想できます。

5.議論

今回の調査にはいくつか不完全な部分があることも述べておきます。具体的には下記です。

5.1.集計方法とサンプル数

調査にはTwitterとYouTubeで、主に私のフォロワーさんを中心に実施しています。これはConvenience samplingとよばれる集計方法に分類され、公平性に欠けます。理想的には複数の異なるプラットフォーム・手法でランダムに抽出し、複数の標本を回収するのがベストです。(大きくコストがかかりますが)

5.2.サンプリングの偏り

集計したサンプリングは偏っている可能性があります。転職に成功した人はアンケートに答えやすく、失敗した人はそもそもこのテーマに関心すらなくなっているかもしれないため、実際よりも失敗した人のデータが不足していると思われます。


その他、もし万が一本調査にご指摘があればぜひ頂戴できれば幸いです。

6.付録

付録A

#Load libraries
library(ggplot2)
library(broom)
library(dplyr)

#Import dataset
file_path = "./assets/engineer-career-data-arranged.csv"
dataset <- read.csv(file_path, header = T)
head(dataset)
attach(dataset)

#multiple linear regression
result <- lm(formula = job.offer ~ ., data=dataset)
summary(result)


#single linear regression
result <- lm(formula = job.offer ~ entry, data=dataset)
summary(result)

#plot
plot(result)
abline(result, lwd=3)

付録B

#Load libraries
library(ggplot2)
library(broom)
library(dplyr)

#Import dataset
file_path = "./assets/engineer-career-data-arranged2.csv"
dataset <- read.csv(file_path, header = T)
head(dataset)
attach(dataset)

#Logistic regression with all variables
result_all <- glm(formula = job.offer ~ ., data = dataset, family="binomial")
summary(result_all)

#Logistic regression with study.load
result <- glm(formula = job.offer ~ study.load, data = dataset, family="binomial")
summary(result)

#plot
plot_view <- ggplot(dataset,aes(x=study.load, y=job.offer)) +
  geom_point() + 
  geom_smooth(method = "glm", method.args= list(family="binomial"))
plot_view

#Odds and Confidence interval
exp(result$coefficients)
exp(confint(result, level = 0.95))

Discussion