orizuru

つながる.見える.わかる IoTソリュ-ション

main_contents

更新情報

工場(製造現場)向けIoTソリューション

自社のIoTシステムを利用した工場(製造業)向けソリューション「Orizuru」は、工場内の各種設備からデータを収集する「ゲートウェイ」、収集したデータ処理をする「データプラットフォーム」、リアルタイムにデータを見える化する「ダッシュボード」、3D CADデータをブラウザ上で表示する「3Dビュー」などの各システムを備えるトータルソリューションになります。

IoTソリューション「Orizuru」では、これらの各ソリューションの個別提供から、「ゲートウェイ」「データプラットフォーム」「ダッシュボード」をパッケージングした「Orizuru IoT」の提供をしております。また、3Dデータをクラウドで管理、表示、検索できる機能を備えた「Orizuru 3D」の提供もしております。

IoTソリューション全体像

IoTソリューション全体像

  • 設備のデータ収集
  • 設備の制御
  • 他のシステムへのデータ連携
  • サーバとのデータ送受信
  • リアルタイム通信
  • リアルタイム検知・通知
  • データの統計処理と機械学習
  • データ保存先選択
  • 各種データのグラフ化
  • 設備ごとの見える化
  • 設備のコントロール
  • ユーザ管理
  • 3Dデータの各種表示
  • 3Dデータの360°ビュー
  • 大容量データの表示

IoTソリューション「Orizuru」の特長

製様々な設備のデータ収集
工作機械で使用するCNCやPLC、産業用ロボット、温度や振動などのセンサーなどのデバイスから各種データを収集することが可能です。様々なデバイスからデータを集約して収集できることで、管理メリットが生まれます。
データの他システムへの連携
昨今様々なwebサービスがありますが、それらの各種webサービスへのデータ連携が可能です。例えば、見える化のwebサービスやBIツールなどへのデータ連携、それ以外にも社内システムへ連携することができます。
データの一元管理
Gateway(ゲートウェイ)から送られてくる様々なデータを一元管理します。様々なソリューションやサービスを使うことによるデータ管理コストを抑えられ、御社の貴重なデータ資産を管理します。
AI、機械学習によるデータ活用
解析したデータを活用し、不良品の検知や製品需要予測、設備異常の検知、製品の故障予測などに繋げることができます。お客様の課題にあわせて必要なデータを取得することから始めていきます。
自動化、予兆保全の実現
AI・機械学習により予測や異常検知できたことをキーとして、次のアクション、すなわち自動化や予兆保全を実現することが可能です。データ活用としてコスト削減や品質改善などを実現します。
各種データのグラフ化
データを目的に応じて表示を変えることが可能です。時系列データーであれば折れ線グラフ、累積データであれば円グラフや棒グラフなどの形式で表示でき、データの取得間隔を狭めることで、リアルタイムデータでの表示も可能です。
巨大な3Dデータをwebで表示
数十GBに及ぶ巨大な3Dデータもスムーズにレンダリングして表示することができます。また、専用ソフトを必要とせず、様々な形式のデータをWebブラウザやスマートフォンで確認することが可能です。
3Dデータの検索
管理しているデータから類似する3Dデータを検索できます。データ形式を問わず、異なる3Dデータを横断して検索可能です。3Dデータ作成前に類似データを確認することで、設計の二度手間を防ぐことができます。
点群データを扱える
CADデータだけでなく、点群データも管理できます。従来は別々に管理していたデータを結合することで、複数のソフトウェアを立ち上げてデータを検索しなければならないといった手間がなくなります。

Orizuru IoT

工場IoT

Orizuru IoTは設備を制御しているCNCやPLC、ロボット、各種センサーとゲートウェイが通信することでリアルタイムにデータを取得、蓄積していくことが可能です。 Orizuru IoTは、マルチデバイス対応ができる国内唯一のソフトウェアです。多くのお客様が実現したいと考えられている、工場、ライン、設備単体の稼働監視や故障原因の特定も、Orizuru IoTでデータを取得することで可能になります。ゼロベースからIoTシステムの開発をすると大規模投資が必要になります。Orizuru IoTならば短時間で設備との通信を確立させることが可能です。 Orizuru IoTによって工場のスマート化を実現させてください。

「Orizuru IoT」の詳細はこちら

Orizuru 3D

3Dデータのweb表示

Orizuru 3DはCAD・点群などの3Dデータを統合管理するソフトウェアです。これまで扱えなかった数十GBに及ぶ容量の巨大な3DデータをWebブラウザで表示できます。それぞれのデータ形式ごとの専用のソフトウェアを使う必要はありません。また、類似する他の3Dデータを、データ形式を問わず横断的に検索できます。クラウドサービスとして提供しているだけでなく、セキュリティや通信速度などのご要望に応じてオンプレミス環境で社内ツールとしてもご利用いただけます。​

「Orizuru 3D」の詳細はこちら

IoTソリューション紹介動画

IoTのお悩み解決

 お客様からIoTに関する様々なお悩みをご相談いただいております。IoTの導入に関することやデータの取得方法、取得したデータの活用方法や見える化など多岐にわたります。このようなお悩みごとに対して弊社としてもなんとか解決したく、日々ご提案をしています。こちらでは、その内容の一部をご紹介します。

パートナー・会員

三菱電機のe-F@ctoryパートナー

e-F@ctory Allianceとは、弊社FA機器との接続親和性の良いソフトウェア・機器を提供するパートナーとそれらを活用しシステムを構築するシステムインテグレーションパートナーとの強力な連携により、お客様に最適なソリューションを提供するためのFAパートナープログラムです。

  • e-F@ctory Allianceの詳細は、こちら をご覧ください。

e-F@ctory Alliance

Aras社の公認パートナー

Aras Innovator®は米国Aras社が開発・提供している、ライセンスフリーのエンタープライズPLM(Production Lifecycle Management)ソリューションです。製品の企画・設計から生産・保守までの製品ライフサイクル全体の管理が行えます。

  • Aras Innovatorの詳細は、Aras PLMソフトウェア をご覧ください。
  • Aras®およびAras Innovator®は、Aras Corporationの登録商標または商標です。

Aras AUTHORIZED Partner 2017

BECKHOFF社の開発パートナー

2018年よりベッコフオートメーション株式会社 の開発パートナーとして、弊社はソフトウエアの開発をサポートさせていただいております。BECKHOFF社製品とソフトウエアとのコミュニケーションを円滑にできる技術支援などを行わせていただいてます。

BECKHOFF

ORiN協議会の会員

ORiN (Open Resource interface for the Network)とは,メーカ・機種の違いを超え、統一的なアクセス手段と表現方法を提供する通信インターフェースです。ロボット、PLC、NC工作機械などの制御装置の情報にアクセスするための標準仕様であり、ORiN2SDKとして実用化されています。

ORiN協議会

AWSパートナーネットワーク(APN)

弊社はAPNコンサルティングパートナーとして、AWS上での顧客のワークロードとアプリケーションの設計、開発、構築、移行、および管理を支援することが可能です。AWSのシステムインテグレーションやアプリケーション開発などご相談いただけます。

AWSパートナーネットワーク(APN)

数値データを使って予知保全を行いたい

データの解析方法が分からない:数値データ編
すでにIoTを導入し、データはたくさんありやりたいこともあるのだけれど、どのように活用したら良いかわからないというご相談をよく伺います。とり貯めた膨大なデータを前にどのように解析、活用すべきかを戸惑うケースが多々あるようです。弊社ではこのようなデータを解析し、お客様の業務のより一層の効率化や品質向上につなげるような提案をさせて頂いております。

今回は住宅設備機器の製造を行っているお客様からのご相談事例を紹介いたします。

数値データの解析のご相談

お客様から頂いたご要望はある製品について耐久試験を行った際のデータをもとに、予知保全を行いたいという内容でした。予知保全とは異常が発生する前に対策を講じるという保全の手法をいいます。下記の図には架空の観測値を描画しており、異常発生前に観測値は大きな値を示すようになっています。このような観測値の変化は試験体の内外で機器が一部破損しているなどの原因が隠れている場合があります。その為、予知保全にはこのような予兆を検知できるような仕組みが必要となるわけです。

解析には試験体に設置した複数のセンサーから一定間隔で取得された数値データを用い、上記のような異常発生前に生じる予兆を探していきます。

予知保全に向けたアプローチ

予兆を定義する為に、以下の手法でアプローチを行いました。

  • 異常度を算出し異常検知の可能性を考察
  • 変化度を算出し予兆の有無を考察

異常検知の可能性の考察

予兆を定義する前に、まずは異常と正常を考えていきます。製品が正常に動作するまでを計測している為、ご提供いただいたデータセットの最後には異常データが存在しているのですが、試験体が正常に動作してると判断されていても、実は異常な数値を示している可能性を考慮していなければ誤った判断をしてしまう可能性があります。異常検知には線形回帰を用い、正常データからどれだけ離れているのかを異常度と定義しました。結果としては以下のような知見を得ることができました。

  1. 正常に稼働しなくなったタイミングで異常度の絶対値が非常に大きな値を示す
  2. 試験中盤に異常度の絶対値が比較的大きな値を示す時点が存在する

1つ目の知見については、線形回帰によって異常検知が可能であることが分かります。2つ目は試験に使用している設備の部品を一部取り換えたことによって大きな異常度を示したことが分かりました。このことは事前に共有されていたことではなかったため、異常度を用いて潜在的な異常を検知することができていたと言えます。

変化度を算出し予兆の有無を考察

連続した時系列データを扱う場合、特定の波形を示す場合があります。周波数や、振幅といったデータの振る舞いがどの程度変化したかを定義した値を変化度といいます。異常度は突発的なイベントには強く反応しますが、継続的に上記のようなデータの振る舞いが変わるイベントには反応しにくいという性質があります。変化度は振る舞いの変化を数値化し、異常度では検知しきれなかった試験体の状態を捉えることが可能になります。変化度を解析した結果、以下の知見を得ることができました。

  1. 異常度が大きな値を示すタイミングで変化度も大きな値を示す
  2. 試験終盤にかけて変化度が大きな値をしめす期間が継続している

1つ目については異常発生時は同時にデータの振る舞いも変化するので変化度も大きな値を示すことが確認できました。2つ目は原因となる外的要因も該当しなかったため、試験体内部に何らかの変化が生じている可能性があるという結論に達しました。時系列的には異常動作が前から変化度が大きくなっており、この時から試験体の一部が破損し始めているとすると異常発生に関係する予兆を捉えることが出来たと考えられます。

システム化へ向けた提案

今回はご提供いただいたデータからお客様のご要望である予知保全の実現可能性を解析結果から考察してきました。得られた知見にはお客様のご要望に沿うものとなったようで、大変ご好評を頂きシステム化への提案をさせて頂いております。今回はお客様のご要望を伺い、解析でも使用した変化度を定期的に計算し、結果をファイルとして書き出す方針でシステム化を予定しております。
このように試験や業務において取得されたデータについても解析を行い結果の共有、システム化への提案を幅広くサポートさせていただきますのでぜひお手元に活用しきれていないデータをお持ちでしたらご相談いただければ全力でサポートさせていただきます。

新卒の面接で逆質問を実施するときの恥ずかしさ

新卒の面接で逆質問を実施するときの恥ずかしさ

こんにちは!
採用担当の池田です。

若者の早期退職について、皆さんはどうお考えですか?

若手の離職については昔から問題視されていることですが、中途採用に従事する身からしても、入社して1,2年の方の応募は年々増えている印象を受けています。

ただ、私自身は「石の上にも三年」という考え方にはあまり賛同できないので、違和感を抱えたまま嫌な仕事に従事するぐらいなら、違う企業に目を向けた方が良いと思っています。

まだまだ青二才の自分が言うのは大変おこがましいですが、やっぱり嫌な仕事ほど無駄なことは無いと思うんですよね。「この仕事が大好き!」とまでならなくても、何かしら自分の中の意義がない仕事であれば、時間の無駄であり、その分野での成長は相当難しいと思います。

転職が“逃げる”ことではなく、ポジティブに捉えられる社会になると、社会人生活の幸福度も上がるのかなと思っている、今日この頃です。

さて、今回は私が面接を実施させて頂いている中での違和感を皆さんに共有したいと思います。

新卒のときに一番嫌だった質問が“逆質問”

私が新卒時、面接で最も苦労していたのが“逆質問”でした。

逆質問とは、応募者側から質問することを指し、通常は面接官から質問するので、その“逆”という意味で逆質問と言われるようになっています。

なぜ嫌だったのかと言うと、単純に意味がないと思っていたからです。

予定調和感満載だったのが嫌だったんです(笑)

だって、面接という選考の場において、質問出来ることなんて限られているでしょ(笑)、と。
そのため、私は面接官という立場で「何か質問ありますか」と聞くのは非常に恥ずかしく抵抗があるんですよね。

今の就活は選考に至るまでに様々な説明会イベントがToo muchと言わざるを得ないほど開催されています。

  1. 企業説明会(女性限定セミナー、キャリアセミナー、OBOG座談会等、名称を変えた多種多様な説明会が開催されている)
  2. インターンシップ向け説明会(インターンシップ集客のために実施する説明会)
  3. インターンシップ
  4. 学内企業説明会(大学内で実施される説明会)
  5. 合同企業説明会(東京ビックサイト等で実施されている)

そのため、選考に至るまでにはありとあらゆる質問を既に社員の方にしているのです。

にも関わらず、選考の場で「何か質問したいことはありますか?」という謎の逆質問はナンセンスとしか言いようがないです、と思ってしまうのは私だけでしょうか。

ちなみに少し話が逸れますが、就活生の逆質問あるあるを私の聞いた限りで集めてみました。

  • 事業内容について質問したら、「それって説明会で言ってたよね?」と攻撃的に返された。
  • 会社の方向性の細かい部分について聞いたら、「そんなのはこの短い時間で答えられない」と言われた。
  • 聞くことが無いから、仕方なく面接官に「活躍している社員で共通しているものは何ですか?」と聞いたら、「万単位の社員がいるから、そんなのは一概に言えないでしょ」と言われた

同じ人事として、こういうおじさんおばさん面接官は許せないですね。面接官という立場を利用して権力を振りかざすような方を面接官に任命している企業は、早めに変えないと企業イメージを大きく損ないかねませんよ。

中途の逆質問はOK

一方、中途の面接時の逆質問は当然のごとく必要だと思います。というのも、今の中途採用のスタンダードなフローに、会社説明会がほとんどないからです。

企業のホームページからの直接応募や転職サイトの媒体の場合は、WEB上での企業研究がメインになるでしょう。また転職エージェントの場合は、エージェントが知っているフワッとした企業情報しか連携してもらえないでしょう(笑)

以上から中途の面接時は、企業側としてもたっぷりと質問の時間を取るべきでしょうし、応募者の方も積極的に質問する姿勢がごく自然のことだと思います。

そのため、中途の面接時に一切質問がない応募者の方は、さすがに面接官から見ると、
弊社に興味ないんだろうな
と思われるので、気を付けた方が良いでしょう。

ちなみに、、、転職を検討されている方は、「質問力」は評価項目として非常に重要だと考えている企業は多いので、要注意です。

例えば、弊社であればホームページを見て業務内容を理解することは相当難しいと思います。というのも、プロジェクトの契約上、具体的案件を公開できないために、広く浅く載せるしかないためです。
さらに、toB向けのビジネスモデルなので、ユーザーとして知ることも難しいですし、上場前なので公開されている情報も圧倒的に少ない。

そのため、多くの方にとっては弊社について知らないことが普通なので、初歩的な質問でも積極的にして頂ければと思っています。

ただ、現実的にはあまり質問しない方も一定数いるんですよね。。。というより、最低限弊社について調べていないなと思えるオーラがプンプン伝わる方が意外にも多いです(笑)

弊社が今まで中途で採用してきた方を振り返ると、質問時間で細かく質問していた方が多い印象があります。質疑応答だけで1時間以上掛かった方もいましたが、弊社としてはそれはごく自然なことだと考えております。

公開されている情報が中途市場ではまだまだ少ないので、今後転職を考えている方は、事前に最低限調べて、不明な点を面接で解消する姿勢で臨むことを強くお勧めします。

新卒の逆質問はどうすべきなのか

少し中途に話が逸れてしまいましたが、新卒の方は逆質問をどのように乗り切れば良いのでしょうか。

それを紐解く上で、逆質問の企業側の意図を整理しておきましょう。私が認識している限りだと、下記の4種類です。

  1. コミュニケーション能力を確かめる(質問力)
  2. 志望意欲の確認
  3. 会社の魅力付け
  4. ポーズ(予定調和)

1.コミュニケーション能力を確かめるについて(質問力)

質問力が高い方こそ優秀な方が多いという考え方が前提ですね。ただ上述したように、新卒の場合は“就活において優秀な方”ほど事前に企業について調べているので、敢えて面接という場で質疑応答の時間を設ける理由は必ずしもないかもしれません。

2.志望意欲の確認について

「弊社に本当に興味があるなら、質問の1つや2つはあるだろうから、質問が無いのはおかしい。」という考え方が前提ですね。
恋愛で例えるなら、付き合って初めてのデートなのに一方的に自分の話ばかりして、質問しないのはNGと言ったところでしょうか(笑)
ただ、緊張しているからこそ質問できないことも多いでしょうし、付き合う前の友人関係時代から色々彼女については聞いていた(就活においては会社説明会に相当します)ので、だからこそ今日のデートでは自分のことを伝える目的で参加していたかもしれません。
そのため、逆質問が無い=志望意欲が低い、というのは一概に言えないと個人的には考えています。

3.会社の魅力付けについて

こちらは非常に良く理解できるのですが、企業は面接という場を優秀な方を口説く場として捉えていることがほとんどです。
そのため、企業側は就活生に鋭い質問を期待しているわけではなく、あくまで魅力付けの方向性の切り口を知りたいだけです。
働き方なのか評価基準なのか、それともキャリアマップについてなのか、ざっくばらんとした質問を企業側が聞くことで、それに即した魅力付けを話していきます。
もし逆質問時に、面接官から非常に丁寧かつ熱心に回答された場合は、通過フラグかもしれません(笑)

4.予定調和について

深い意図はなく、面接の流れとして、最後に質疑応答の時間を設けると考えている場合です。私自身が面接官として担当する際は、逆質問が大嫌いなので省こうと思うものの、質疑応答の時間を設けないことによるリスクもあるんですよね。

例えば、

  • 本当に聞きたいことがあったのに、質疑応答の時間がなく、誠意が足りない
  • 面接で一方的に質問されるばかりで、あの企業は上から目線

などなど、ネットに書かれてしまうんですよ(笑)

そのような背景もあり、とりあえず「何か質問ありますか」とお聞きするケースは多いと思います。

逆質問で「特にありません」は不合格なのか!?

ここで多くの方が気になっているであろうポイントの
特にありません
と逆質問時に答えた場合、どうなるのかについてお伝えしましょう。

まず結論から伝えると、合否に大きな影響はないと私は考えています。理由としては、逆質問は面接の終盤にあることが多く、その局面では既に合否が決まっていることが多いためです。

もちろん試合終了直前の、一発逆転満塁ホームランは可能性としてはありますが、私の経験範囲では、逆質問“だけ”大きな爪痕を残した方はほとんど記憶にありませんね。

また中途の方で特に質問がない場合は、志望意欲の点で疑う部分もありますが、優秀な方であれば、面接終盤の逆質問までに相当な評価をされているでしょうから、特に質問が無いからと言って合否に著しい影響は与えることは考えにくいです。

ただし、例外として、逆質問メインの面接の際はぜひ空気を読んで下さい(笑)

というのも新卒の面接であるのですが、面接そのものが逆質問だけというケースは結構あります。
最初から最後までずっと逆質問なんです。

企業側の意図としては、コミュニケーション能力および志望意欲の確認のためにしているのですが、私自身はこの形式は大反対です。

というのも、事前に逆質問だけの選考という情報を知っているか否かで大きく結果に違いが出ると考えているからです。

例えば某有名企業は、2次面接時に逆質問だけの面接を60分実施します。普通に考えて面接の場で60分質問されるなんて難しいですよね?

ただここの企業の面接情報は一部の学生に筒抜けなので、選考を受ける学生の中には事前に逆質問がメインの面接であることは知られています。そのため、事前に準備するようにアドバイスをしていました。
※準備方法については別途お伝えします

しかし知らない学生もいるので、何も知らずに参加した学生は結構びっくりしますよね。面接開始直後に、
何か質問ありますか?
が無限ループのように続くんですから(笑)

このような就活意識高い層に有利に働く内容は個人的には好きにならないのですが、内定のためには致し方ないかもしれないので、選考情報は事前に調べることをお勧めします。

逆質問をされたらどうすべきなのか

逆質問は合否に大きく影響しない
と言ったものの、もちろんしないよりはした方が良いですし、上述したように面接全てが逆質問のケースもあるので、最低限の対策はした方が良いですよね。
※ここでは新卒の方に絞ってお伝えしていきます。

私は逆質問に対しては、下記のようにアドバイスをしていました。

  1. 面接官の主観が入る質問をすること
  2. 面接で自分が質問された内容を聞くこと
  3. 面接時には、「それでは●つほど、質問を宜しいでしょうか」とお断りを入れること

面接官の主観が入る質問をすることについて

具体的には下記になります。
〇:●●さんはこの会社に入って良かった点、また会社に対して改善すべき点は何だと考えていますか
×:この会社の魅力、また改善点は何ですか

就活経験者なら理解頂けると思うのですが、質問に対してぶっきらぼうに答える面接官って非常に多いんですよね。
冒頭でお伝えした部分を重複しますが、下記のようにやり取りで、イラっとした就活生は多いのではないでしょうか?

質問:現在活躍されている社員の共通点は何でしょうか?
そんなの人によって違う
質問:説明会時に、3年後に●●計画を聞いたのですが、業界最大手の▲▲社と差別化するために具体的に何をされるのかについて教えて頂けないでしょうか?
機密情報だから、この場で答えられない
質問:女性の育休や産休の取得状況について細かく教えて下さい
それは部署やプロジェクト次第だね

ただでさえ緊張している就活生に対して、相手の意図をくみ取ろうとしない姿勢はいかがなものかと思います。

とはいえ、就活生は選考の場においては文句を言うこともできないので、これを回避するためには面接官が逃げられない質問が無難です。

一般論を聞きたいのではなく、面接官である“あなた”の意見を知りたいんですという質問であれば、しっかり答えてくれることでしょう。

面接で自分が質問された内容を聞くことについて

例えば、

  • 人生で最も辛いときは何でしたか、またそれをどう乗り越えましたか
  • 会社を選ぶ基準は何ですか
  • 合わない人とはどのように対応されますか

などを面接官から聞かれた場合、それをそのまま逆質問で面接官に聞けばいいんです。

上記を少し逆質問用にカスタマイズすると、

  • 仕事で最も辛かったときは何でしたか、またそれをどう乗り越えましたか
  • 新卒時の会社を選ぶ基準は何でしたか?また今新卒に戻ったら今の会社を選びますか、それとも別の会社を選びますか
  • 社内で合わない人にどのように対応されますか

になり、全く違和感なく質問できることでしょう。

事前に用意していた逆質問を忘れてしまった場合に有効なので、ぜひお試し下さい。

面接時には、「それでは●つほど、質問を宜しいでしょうか」とお断りを入れることについて

これは面接官の立場としての私からのお願いでもあり、就活生にとっても楽になる方法だと思うのですが、事前にいくつ質問があるかを最初に伝えると、お互いに聞きやすいですよね。
※プレゼンでも、最初に伝えたい項目数を伝えた方が、伝わりやすいのと同じ原理です

これをやらない場合、逆質問は多くなければいけないと思い込んでいる方の対応をすると結構辛いんです(笑)絶対に質問したいと思っていないことをダラダラ質問されるのは拷問ですよ(笑)

さて今回は逆質問についてお伝えしましたが、就活生はもちろん、面接官の方にもぜひ参考になればと思っております。

20卒の就活も既に始まっているようですが、あまり早く準備し過ぎても後半にバテてしまうので、ほどほどにやりつつ学生生活にしかできないことを満喫して下さいね。

Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介
みなさん、こんにちは。アートディレクターのhayatoです。
今回はBECKHOFF(ベッコフ)社で毎年開催しているBeckhoff Technology Days 2018(以下BTD)でIoTソリューション Orizuruをご紹介させていただきました。弊社CTO田口からみなさまにご紹介させていただき、Orizuruの展示ブースも出展させていただきましたので、その内容を共有します。

BTDの概要

Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介
今年もBECKHOFF社の製品紹介をはじめ、様々なプログラムが準備されていました。
昨年のBTDではAIをテーマにした座談会「当事者・関係者が語る『AI現場力』」にCTO田口が登壇させていただきましたが、今年はゲストスピーカー2名による特別講演があり、貴重なお話を聞くことができました。

開催概要

    横浜会場
    日時:2018年9月11日(火)13:00~17:30
    場所:日石横浜ビル1Fホール(横浜市中区桜木町1-1-8)
    名古屋会場
    日時:2018年9月14日(金)13:00~17:30
    場所:名古屋コンベンションホール(名古屋市中村区平池町4-60-12 グローバルゲート)

<横浜会場>
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

<名古屋会場>
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

IoTソリューション Orizuruのご紹介

Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介
BECKHOFF社製品紹介の最後に、IoTソリューション OrizuruをCTO田口よりご紹介。
今年度よりBECKHOFF社とパートナーとして活動させていただいておりますが、その他にも様々な企業・ソリューションと連携しております。
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

Orizuruは、CNCやPLC、ロボット、センサーをつなげてデータを収集するGateway(ゲートウエイ)、収集したデータを蓄積、解析に活用するData Platform(データプラットフォーム)、データを見える化するDashboard(ダッシュボード)から構成されています。Gateway(ゲートウエイ)に関しては、BECKHOFF社のIPC、C60xxシリーズを使用しております。
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

Orizuruを活用したソリューションをさらにブラッシュアップさせ、
多くのお客様にご活用いただければと思います。
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

IoTソリューション Orizuruの展示

<横浜会場>
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

<名古屋会場>
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

横浜会場、名古屋会場共に多くのお客様にIoTソリューションをご紹介させていただきました。
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介
Beckhoff Technology Days 2018でIoTソリューションOrizuruをご紹介

最後に

昨年に続き、今年もBTD参加させていただきました。横浜・名古屋共に多くの方が参加され、関心を高さを伺えることができました。
様々な企業様の課題をOrizuruだけで解決するのではなく、パートナー企業様とコラボレーションすることでより多くの課題を解決できるようになりました。まだまだOrizuruの知名度は低いですが、地道に認知を広げていければと思います。

それでは、次回もお楽しみに。
hayato

階層ベイズモデル

はじめに

 書籍「ベイズモデリングの世界」に「階層モデルで『個性』をとらえる」という解説がある。著者は北大の生態学を専門とする久保拓弥氏である。架空の植物を考え、その結実確率(胚珠が種子になる確率)を階層ベイズモデルを用いて推定する過程が分かりやすく解説されている。階層ベイズモデルのパラメータを推定する代表的な手法には、経験ベイズ法とMCMC法がある。久保氏の解説では前者を用いた推定がRを用いて行われている。MCMC法による解法の詳細には言及していないが、Rのサンプルプログラムへのリンクが記載されている。今回は、このサンプルプログラムと同じことを、前回紹介したPyMCを用いてなぞってみたい。今回使うのはPyMC3である(前回はPyMC2であった)。

ソースコード

 今回実装したコードはここにあるsample_0.ipynbである。

問題設定

 ここで取り上げる問題は以下の通り。

  • 架空植物のある1個体を選択したとき、その植物がいくつ種子を付けるのかを推定したい。
  • この植物は胚珠(種子の元になる器官)を必ず10個持つ。
  • 全ての胚珠が必ず種子になるわけではない。ある個体の種子は4個、別の個体は0個だったりする。
  • この架空植物を100個体観測する。この観測データから各個体の結実確率を推定したい。

  • 全ての個体が10個の種子を作れば、全種子数は1000(=10\times100)、全ての個体がどれも種子を作らなければ全種子数は0(=0\times100)になる。データはここからダウンロードできる。データの中身は以下の通り。

    “plant.ID”,”y”,”alpha”
    1,0,-4.15958227809385
    2,0,-3.71836219544951
    3,0,-3.06901965190728
    4,0,-3.05421060686106
    5,0,-2.88065618323557
    6,2,-2.70559527531842
    7,1,-2.44170265669845
    8,1,-2.22132654301567

    解析に使う列はyである。この列には各個体の種子数が記載されている。横軸に種子数y、縦軸に個体数pを取ると以下のグラフを得る。

    種子数0の個体数は7、種子数1の個体数は10であることなどが分かる。種子数0から10までの個体数を全て足すと100になることに注意する。

    モデル化

     ある1個体を考える。この個体が種子をy個作る確率をモデル化したい。各個体には胚珠(種子の元になる器官)が10個あり、各胚珠は種子になるかならないかのどちらかである。従って、次の二項分布{\rm Bin}で表すことができる。

    (1)    \begin{eqnarray*} p(y|q)&=&{\rm Bin}(y|10,q) \\ {\rm Bin}(y|10,q)&=&{}_{10} C _y\;q^y(1-q)^{10-y} \end{eqnarray*}

    ここで、qは胚珠が種子になる確率(結実確率)である。このとき、全ての観測データが実現する確率は

    (2)    \begin{equation*} p(y_1,\cdots,y_{100}|q_1,\cdots,q_{100})=\prod_{i=1}^{100}p(y_i|q_i) \end{equation*}

    となる。

    個体差を考慮しない予測

     いま結実確率q_iが個体に寄らず一定であると仮定すると、対数尤度は

    (3)    \begin{eqnarray*} \ln{p(y_1,\cdots,y_{100}|q) &=& \sum_{i=1}^{100}\ln{p(y_i|q)}\\ &=& \sum_{i=1}^{100}\ln{{\rm Bin}(y_i|10,q)}\\ &=& \sum_{i=1}^{100}\left[y_i\ln{q}+(10-y_i)\ln{(1-q)} \right] + {\rm const.} \end{eqnarray*}

    となる。この式をqで微分することにより最尤推定値\hat{q}を得る。

    (4)    \begin{equation*} \hat{q}=\frac{1}{1000}\sum_{i=1}^{100}y_i \end{equation*}

    観測値を用いて\hat{q}を計算すると0.496となる。このときの種子数と個体数の間の関係式は

    (5)    \begin{equation*} p=100\;{\rm Bin}(y|10,\hat{q}) \end{equation*}

    となり、対応するグラフは以下の点線となる。

    明らかに観測データを再現できていない。

     ここまでの解析をPyMC3で行う。コードは以下の通り。

  • 3行目:qに対して事前確率を定義する。lower=0からupper=1の範囲で定義される一様分布とした。
  • 4行目:先に示した尤度(二項分布)を定義する。observedに観測値をysを与える。
  • 5行目:事後確率最大化(MAP推定)を行う。

  • qymodelが必要とするstochastic変数である。PyMC2では、ユーザが明示的にこれらをModelのコンストラクタに渡していた。PyMC3では、上のコードのように、withの直下にモデルに必要な各種変数を記述すれば良い。上記の出力は以下の通り。

    0.4960000053023121

    先に示した値と同じである(qの事前分布として一様分布を与えたから、MAP推定値と最尤推定値は一致する)。

    個体差を考慮する予測

     次に結実確率qを個体iごとに異なるものとする。

    (6)    \begin{eqnarray*} p(y_i|q_i) &=& {\rm Bin}(y_i|10,q_i) \\ &=& {\rm Bin}(y_i|10,f_S(\beta+\alpha_i))\equiv p(y_i|\beta,\alpha_i) \\ f_S(z)&=&\frac{1}{1+\exp{(-z)}} \end{eqnarray*}

    ここで、f_S(z)はシグモイド関数である。\betaは個体に依存しないパラメータを、\alpha_iは個体に依存するパラメータを表す。\beta\alpha_iについて次の事前確率を定義する。

    (7)    \begin{eqnarray*} p(\beta|\tau_{\beta})&=&\mathcal{N}(\beta|0,1/\tau_{\beta}) \\ p(\alpha_i|\tau_{\alpha})&=&\mathcal{N}(\alpha_i|0,1/\tau_{\alpha}) \end{eqnarray*}

    ここで、\mathcal{N}(x|\mu,1/\tau)は平均\mu、精度\tauの正規分布を表す(分散\sigma^2の逆数を精度(precision)と呼ぶ)。個体に依存しない\betaについては分散の大きな(1/\tau_{\beta}=100)分布を考える。一方、個体に依存する\alpha_iに対しては、もう少し注意深く考察したい。そのため、次の事前確率を定義する。

    (8)    \begin{eqnarray*} p(\tau_{\alpha}|a,b) &=& {\rm Gam}(\tau_{\alpha}|a,b) \\ {\rm Gam}(x|a,b) &=& \frac{b^a}{\Gamma(a)}x^{a-1}\exp{(-bx)} \end{eqnarray*}

    ここで、{\rm Gam}(x|a,b)はガンマ分布であり、これは正の実数を生成する。\tau_{\alpha}を定数ではなく確率から生成される値とすることで、観測データに適応させて\alpha_iを決めることができる(ただし、abはあらかじめ決めておくハイパーパラメータである)。このように事前分布のパラメータに対し、さらに事前分布を導入するモデルを階層ベイズモデルと呼ぶ。\vec{y}=(y_1,\cdots,y_{100})\vec{\alpha}=(\alpha_1,\cdots,\alpha_{100})と置くと、求めたい事後分布は次式で与えられる。

    (9)    \begin{equation*} p(\vec{\alpha},\beta,\tau_{\alpha}|\vec{y}) = \frac{ \prod_{i=1}^{100}\;p(y_i|\beta, \alpha_i)p(\beta|\tau_{\beta})p(\alpha_i|\tau_{\alpha})p(\tau_{\alpha}|a,b)} {p(\vec{y})} \end{equation*}

    ここで、右辺分母は次式で計算される。

    (10)    \begin{equation*} p(\vec{y})=\prod_{i=1}^{100}\int d\beta\;d\alpha_i\;d\tau_{\alpha}\;p(y_i|\beta, \alpha_i)p(\beta|\tau_{\beta})p(\alpha_i|\tau_{\alpha})p(\tau_{\alpha}|a,b) \end{equation*}

    この積分は解析的に計算できないので、ここから先の計算はPyMC3を用いてMCMC法で近似する。コードは以下の通り。

  • 3行目:p(\beta|\tau_{\beta})を定義する。tau=\tau_{\beta}=0.01
  • 4行目:p(\tau_{\alpha}|a,b)を定義する。alpha=a=0.01,beta=b=0.01
  • 5行目:p(\alpha_i|\tau_{\alpha})を定義する。shape=100として、100個の\alpha_iを生成する。
  • 6行目:f_S(\beta + \alpha_i)を計算する。
  • 7行目:p(y_i|\beta,\alpha_i)を定義する。observedには観測値ysを与える。
  • 8行目:MAP推定を行う。
  • 9,10行目:サンプリングを行う。

  • 上のコードを実行したあと、以下のコードで収束しているか否かを判定する。

    出力は以下の通り。

    {‘alpha’: array([0.99992116, 0.99997074, 0.99997656, 1.00101515, 1.0000671 ,
    0.99997194, 0.99990008, 1.00046983, 0.99990016, 1.00004488,
    0.99997887, 0.99996494, 1.00001114, 0.99993037, 1.00009044,
    0.9999153 , 0.99990012, 0.99999316, 0.99990019, 0.99990849,
    0.9999183 , 1.00019395, 0.99997166, 0.99990267, 1.00025804,
    1.00006084, 1.00003207, 1.00001905, 1.00002649, 0.99999359,
    0.99991317, 0.99990444, 1.00010107, 1.00044065, 1.00008226,
    0.9999002 , 0.99991316, 0.99995332, 1.00016158, 1.00016238,
    0.99991051, 0.99994176, 1.00003935, 0.99997246, 1.00052741,
    1.00017737, 0.99995378, 1.00002957, 1.00018027, 0.99999548,
    1.00012819, 0.99990123, 0.99993936, 0.99992739, 0.99991631,
    0.9999227 , 0.9999047 , 1.00006704, 0.99997697, 0.99992804,
    0.9999103 , 0.99990415, 0.99991652, 0.99991608, 1.00098608,
    0.99990014, 0.99990024, 0.9999914 , 1.00003664, 0.99991117,
    0.99990698, 0.99997845, 0.99991626, 0.99992411, 1.00014929,
    0.9999008 , 0.9999 , 0.99992404, 0.99990093, 0.99990898,
    1.00012367, 1.00011088, 0.99995555, 0.99991072, 0.99992426,
    1.00033826, 1.00004621, 0.99990063, 0.99991521, 1.00011476,
    1.00005838, 0.99990038, 0.99991504, 0.99990287, 0.99991835,
    1.00019647, 0.99993153, 0.99993019, 0.99995296, 1.00004081]),
    ‘beta’: 0.9999865601392494,
    ‘tau’: 1.0006839287826985}

    100個の\alpha_i\beta\tau_{\alpha}のGelman-Rubin統計量\hat{R}が出力される。詳細は省くが、経験則から\hat{R}<1.1のとき収束したとみなして良い。上の結果を見ると全変数が1.1未満となっていることが分かる。ここまでの作業で、式(9)で定義される事後確率が求まったことになる。この事後確率を用いると、予測される種子数y^*の分布は次式で計算される。

    (11)    \begin{eqnarray*} p(y^*|\vec{y}) &=& \int d\beta\;d\vec{\alpha}\;d\tau_{\alpha}\ p(y^*|\beta,\vec{\alpha}) p(\vec{\alpha},\beta,\tau_{\alpha}|\vec{y}) \\ &\simeq&\frac{1}{M} \sum_{(\vec{\alpha},\beta,\tau_{\alpha})\sim p(\vec{\alpha},\beta,\tau_{\alpha}|\vec{y})}p(y^*|\beta,\vec{\alpha}) \end{eqnarray*}

    和は事後確率からサンプリングした点を用いて行えば良い。Mはサンプル点の総数である。この計算を行うコードは以下の通り。

  • 1行目:サンプル点の数を取り出す。
  • 2行目:事後確率を計算する。
  • 4行目:yの事後確率のサンプル点を取り出す。

  • これだけのコードでp(y^*|\vec{y})からサンプリングされた点を得ることができる。 このサンプル点からヒストグラムを作れば、yの予測分布を得ることができる。

    次のコードで描画する。

    以下に結果を示す。

    凡例の意味は以下の通り。

  • 青色の丸:観測値
  • 橙色の丸(点線):結実確率に個体差がないと仮定した場合の分布
  • 緑色の丸:結実確率に個体差があると仮定した場合の分布(平均値)
  • 青色の領域:\sigma(標準偏差)の範囲
  • 黄色の領域:2\sigmaの範囲

  • 結実確率に個体差を考慮することにより、観測データをかなり良く再現できるようになることが分かる。

    まとめ

     今回は、階層ベイズモデルにより、個体差を取り込む手順を示した。尤度p(y|\beta,\alpha_i)に対し、パラメータ\beta\alpha_iの事前確率を仮定する。後者の事前確率に含まれるパラメータ\tau_{\alpha}に対し、さらに事前確率を導入することにより、\alpha_iを単なる主観ではなく観測データに適応させて決めることができるようになる。すなわち、観測データから個体差を抽出することができるのである。
     今回の解析ではPyMC3を用いた。前回使用したPyMC2よりモデルを記述しやすくなっている。また、PyMC3ではバックエンドにTheanoが使われており、速度面でも改善が見られる。ご存知のようにTheanoは最近メンテナンスを停止する旨の告知がなされた。PyMC3の開発チームは、PyMC3のバックエンドとして必要となる機能だけではあるが、メンテナンスを引き継ぐようである。また、それと並行してPyMC4の開発が進められている。こちらのバックエンドはTensorFlow Probabilityなるモジュールを使うようだ。PyMC4のリリースはまだまだ先であり、今後もPyMC3の機能拡張やバグフィックスが続けられるとのことである(引用元)

    行列の条件数

    エンジニアのtetsuです。

    ディープラーニングを勉強されている方の中にはIan Goodfellowらによって書かれたDeep Learningという本をご存知の方も多いのではないでしょうか。この本の4章はNUMERICAL COMPUTATIONという題目となっており、そのなかには条件数(condition number)というものが紹介されています。今回はこの条件数について数値例を交えて説明していきたいと思います。

    条件数(condition number)とは?

    条件数とは連立一次方程式をコンピュータを用いて解く際に、どれだけ誤差が乗りやすい行列なのかを示した指標となります(実は連立一次方程式以外にも条件数を定義できますが、ここでは連立一次方程式に限定します)。行列A \in {\mathbb R^{n \times n}} に対して、その条件数はAの最大特異値\sigma_{\rm max}と最小特異値\sigma_{\rm min}を用いて次のように定義されます。

         \begin{eqnarray*} {\rm cond}(A) := \frac{\sigma_{\rm max}}{\sigma_{\rm min}} \end{eqnarray*}

    Aが対称行列の場合には特異値と固有値が一致しますので、上記の最大特異値と最小特異値はそれぞれ最大固有値と最小固有値に置き換えても問題ありません。
    この条件数が大きくなると、Aを係数にした連立一次方程式の解は丸め誤差の影響を大きく受けるため、誤差が大きくなりやすいです。一方で条件数が小さければ、丸め誤差の影響が小さくなります。ここで丸め誤差とはコンピュータの中で数値を有限桁で近似することで生じる誤差のことを指します。手計算とは異なり、コンピュータ上では無限桁の数値を有限桁であらわす必要があるため、丸め誤差が生じます。条件数の違いによって、この丸め誤差の影響の大きさが変化します。

    連立一次方程式の数値例

    ここでは行列の条件数が小さい場合と大きい場合に分けて、連立一次方程式A{\mbox{\boldmath $x$}} = {\mbox{\boldmath $b$}}を単精度でコンピュータによって解かせた例を示します。

    条件数が小さい場合

    行列Aとベクトル{\mbox{\boldmath $b$}}はそれぞれ次のとおりです。

        \begin{eqnarray*} A=\begin{bmatrix}0.9&-1&1&-1 \\ 1&-1&1&-1 \\ 1&-1&0&0 \\ 1&0&0&-1 \end{bmatrix},\ {\mbox{\boldmath $b$}}=\begin{bmatrix}-3\\-2\\ -1\\ -3 \end{bmatrix}. \end{eqnarray*}

    この行列Aの条件数はおよそ90です。真の解  {\mbox{\boldmath $x$}}_{\rm truth}とNumPyのlinalg.solveによって求まった解 {\mbox{\boldmath $x$}}_{\rm solve}はそれぞれ次のようになります。

        \begin{eqnarray*} {\mbox{\boldmath $x$}}_{\rm truth} = \begin{bmatrix} 10\\11\\12\\13\end{bmatrix},\  {\mbox{\boldmath $x$}}_{\rm solve} = \begin{bmatrix} 9.999997\\10.99999\\11.99999\\12.99999\end{bmatrix}. \end{eqnarray*}

    これらの相対誤差||{\mbox{\boldmath $x$}}_{\rm truth} - {\mbox{\boldmath $x$}}_{\rm solve}||_2 / ||{\mbox{\boldmath $x$}}_{\rm truth}||_21.6 \times 10^{-7}です。
    この結果をみると、条件数が小さい問題では高い精度で解が得られていることがわかります。

    条件数が大きい場合

    続いて条件数が大きい問題となります。ここでは行列A

        \begin{eqnarray*} A=\begin{bmatrix}0.9999&-1&1&-1 \\ 1&-1&1&-1 \\ 1&-1&0&0 \\ 1&0&0&-1 \end{bmatrix} \end{eqnarray*}

    とし、{\mbox{\boldmath $b$}}はさきほどと同じです。この行列Aの条件数はおよそ90000になります。真の解  {\mbox{\boldmath $x$}}_{\rm truth}とNumPyのlinalg.solveによって求まった解 {\mbox{\boldmath $x$}}_{\rm solve}はそれぞれ次のようになります。

        \begin{eqnarray*} {\mbox{\boldmath $x$}}_{\rm truth} = \begin{bmatrix} 10000\\10001\\10002\\10003\end{bmatrix},\  {\mbox{\boldmath $x$}}_{\rm solve} = \begin{bmatrix} 9998.340\\9999.349\\10000.34\\10001.34\end{bmatrix}. \end{eqnarray*}

    これらの相対誤差||{\mbox{\boldmath $x$}}_{\rm truth} - {\mbox{\boldmath $x$}}_{\rm solve}||_2 / ||{\mbox{\boldmath $x$}}_{\rm truth}||_21.6 \times 10^{-4}です。
    さきほどよりも精度が悪くなっていることがわかります。また条件数は前の行列よりも3桁大きくなっていますが、相対誤差もおおよそ3桁程度大きくなっています。

    条件数が大きいときの対策は?

    条件数が大きいときには正確な結果が得られないことが示されましたが、そのような場合にはどうすればよいのでしょうか。解法を工夫すれば解決されるのではとも思いますが、条件数というものは解法に依らずに決まり、解法を工夫して精度が改善されるという類のものではありません。
    このため、高精度計算を用いることが解決方法となります。前述した例では単精度を使っていましたが、これを倍精度にしたり、4倍精度にしたりすることです。当然ながら計算時間が増えるため、精度と計算時間のバランスをみて決める必要があります。

    終わりに

    今回は行列の条件数について数値例を交えて説明をしました。機械学習のなかには連立一次方程式の計算が多くあらわれるため、いざというときのために知っておくと何かの役に立つかもしれませんね。