こんにちは。
ベガコーポレーション所属エンジニアの田中です。
今回は、インターンで新卒の内定者の方が来社されましたのでその内容について紹介させていただきます。
内定者さんには、弊社のデータ分析で使用しているSAP Predictive Analytics(以後SAP PA)を使って、電力予測とクラス分けの2つの課題に挑戦していただきました。インターン期間は2018年7月17日〜27日の約2週間で、成果発表を含めた課題解決を行っていただきました。
この記事の構成は、
§1. 電力予測
§2. クラス分類
§3. インタビュー
§4. 最後に
となっています。§1, 2が技術的な内容で、§3では内定者さんにインターンの感想などのインタビューを行ったものを掲載しています。そして、最後§4に総括・コメントを書いています。
§1. 電力予測
このセクションでは、SAP PAを用いた電力予測について紹介します。SAP PAの詳細については、以前のブログに記載されておりますので、ご興味のある方は参照していただければと思います。
インターン課題として、内定者さんにはデータの収集・整形からSAP PAを用いた予測モデルの構築までの一連の行程を行っていただきました。その中で、予測精度を上げるためにどのようなデータを与えれば良いかという点を内定者さん自身で考察していただきました。
学習データの収集では、電力会社が公開している電力量などの数値と該当地域の気候データの取得を行ってもらいました。これらデータを使って、SAP PAによる予測モデルを作成するためには目的変数と説明変数を設定する必要があります*1 。特に、目的変数として何を与えれば、予測制度が上がるのか?を考えることが重要な作業となります。加えて、与える説明変数の期間についても調整してもらいました。ちなみに収集・整形したデータを学習データと評価データに上手く分割することで予測モデルの汎化能力を上げることも内定者さんに行っていただきました *2。 これら地道な調整の結果、今回は全てのモデル作成で「学習データ:2012年〜2017年, 評価データ:2018年〜予測日」の分割期間を採用しました。
今回の予測対象は、2018年7月1日〜17日の期間での日毎の最大電力となっています。まずは、説明変数として気温を与えたものの中で、2パターンの結果を示します。 2パターンとは、それぞれ説明変数の期間を対象日から過去1週間分と過去1ヶ月間分に設定している場合に分けています。また、予測値を評価する指標としては、Root Mean Square Error (RMSE)を使用しました。RMSEは、予測と実測との差を表している値で、ゼロに近いほど予測精度が高いことを意味します。
それでは、最大電力の予測結果を見ていきます。
1)説明変数:対象日から1週間前の気温
RMSE
SAP PA : 117.1 電力会社: 68.50
2)説明変数:対象日から1ヶ月前の気温
RMSE
SAP PA : 112.7 電力会社: 68.50
上記2つの結果から、説明変数として気温だけを与えた場合は、説明変数の期間を調整することで僅かに予測精度が上がったものの、残念ながら2パターンともに電力会社の予想精度を大きく下回ってしまう結果となりました。
次に、昨年の同時期の電力を説明変数として与えたものを示します。
説明変数:対象日から1年前の前後3日分の電力
RMSE
SAP PA : 76.47 電力会社: 68.50
SAP PAの予測精度は大きく向上したものの電力会社の予測精度にはまだ及びません。
そこで、説明変数として、気温と昨年の電力を併用したモデル作成しました。
説明変数:当日の気温と前3日分の電力
RMSE
SAP PA : 36.15 電力会社: 68.50
結果としては、電力会社よりも高精度な予測値を出すことができました。しかし、今回の予測モデルでは気温の変動が大きい時期に対する予測精度が著しく悪化してしまう汎化性での欠点も見つかりました。このように、予測モデルの性能の観点では、以前に弊社エンジニアが作成したモデルには及びませんでしたが、内定者さんの新しい発想から多くの発見が生み出されました。
§2. クラス分類
次に、挑戦していただいた課題はクラス分類の問題となっています。特に、インターンではある2次元上のデータを2つのクラス(または3つのクラス)に分類する問題を解いていただきました。このクラス分け問題は、以下のように、2種類の値(+1またはー1)が分布しているデータを2色の領域に色分けする課題へと置き換えることができます。
この課題では、新卒エンジニアである私も同じ課題に挑戦し、どちらが上手く色分け出来るかの対決を行いました。 ちなみに私は、SAP PAとは別の手法としてTensorFlow(以後、TF)を用いたディープラーニングのアプローチから挑戦しました。
今回は、与えられた学習データに対して、どのような学習モデルをどのように構築するのかという点にフォーカスした課題となっています。それでは、さっそく3本勝負の結果を見ていきます。ちなみに、勝敗の判定基準は内定者さんの主観です。
第1問) 2クラスの分類(長方形)
僅差で私、田中の勝利!! 正直、微妙なところですが内定者さんに1勝を譲ってもらいました。
第2問) 3クラスの分類
私は2色にしか色分けできていないのに対して内定者さんは3クラスに分類できているので、完全に内定者さんの勝利。
第3問) 2クラスの分類(ロール)
何となく渦巻きを巻いているので私の勝利!! ということで3本勝負の結果は、内定者さん1勝、私2勝で何とか面目を保ちました。
最後に、第3問に特化したアルゴリズムを内定者さんが作成して下さったので、その色分け結果を示します。詳細は省きますが、それなりに上手く色分けできているように思います。
§3. インタビュー
最後に、内定者さんにインタビューした内容を一問一答形式でまとめました。私からの質問に対して、内定者さんが答えるというものです。
Q1. 今、大学ではどのようなことをしていますか?
A1. 大学ではRubyを使って教育用プログラミング言語Scratchを対象とした研究を行っています。また、ものづくり部でアプリ制作もしています。学外では小・中学生にRubyプログラミングを教える団体に所属しています。あとエンジニア主体のRubyの勉強会に参加したりもしています。
Q2. ベガの選考を受けようと思ったのは何故ですか?
A2. 福岡に知り合いが多い中で、ベガを知りました。福岡という土地柄と社員さんの雰囲気の良さに魅力を感じ選考を進めて来ました。東京の企業も何社か受けましたが、技術レベルの高さとユニークな強みのある会社であると感じたことが決め手となりました。
Q3. インターンを受けようと思ったのは何故ですか?
A3. 一番はベガの社員さんの雰囲気を知りたいと思ったからです。あと実業務に早く触れて実践的に技術力を身に付けていきたいと考えました。
Q4. インターンで技術的に大変だったことは何かありますか?
A4. 今までデータ分析をしたことがなかったので、予測モデルを作成することが大変でした。ただ、メンターさんに親切に教えていただいたので何とか形することができました。
Q5. インターンの雰囲気はどうでしたか?
A5. 社員さんの雰囲気がとても良かったです。質問しやすい環境で自分のアイディアなども聞いていただけて楽しく課題に挑戦できました。
Q6. なんとなくでも職場の雰囲気、業務のイメージはつかめましたか?
A6. 職場はキレイで家具も揃っていて雰囲気もとても良かったです。あとランチにも連れて行ってもらえて、いろいろ話ができてよかったです。業務の具体的な内容までは把握しきれてはいませんが、大まかなイメージはできたように思います。
§4. 最後に
今回のインターンでは、二週間という短い期間の中で試行錯誤をしながら、しっかりと成果発表までやりきった内定者さんを見て、『とても優秀な学生さんだな』という印象を受けました。このような優秀な学生さんが弊社に集まって来ている状況をとても嬉しく思いつつ、弊社のエンジニアとしては身の引き締まる思いです。来年度から一緒に働いていけることを楽しみにしています!!