Analytics

Find out how analytics, from data mining to cognitive computing, is changing the way we do business

Analytics
SAS ViyaでSASプログラムをバッチで実行する方法の紹介

一、背景の紹介 SAS Viyaに搭載されているSAS StudioはSASプログラムの作成と実行のツールとしてよくユーザーさんたちに利用されています。また、実際のビジネスの中では、SASプログラムのバッチ実行が必要となる場面もたくさん存在しています。しかし、多くのSAS9を活用している既存のユーザーは、Viyaでのバッチ実行方式に対してまだ詳しくないかもしれませんので、本ブログを通してViyaでバッチ方式でのSASプログラムの実行方法を紹介したいと思います。 以下は本記事内容の一覧です。読者は以下のリンクをで興味のあるセクションに直接ジャンプすることができます。 二、sas-viya CLIツールの紹介 1.sas-viya CLIとは 2.インストール方法の紹介 三、SASプログラムをバッチで実行する方法の紹介 1.バッチでSASプログラムの実行 2.実行されたバッチジョブの確認とログの取得方法 3.バッチジョブの削除と停止方法 二、sas-viya CLIツールの紹介 1.sas-viya CLIとは SAS Viyaのコマンドラインインターフェース(以下はsas-viya CLI)は、コマンドライン上で、SAS ViyaのRESTサービスを利用することによって、SAS Viyaの設定や機能を利用するためのツールです。CLIは、グラフィカル・ユーザー・インターフェース(GUI)を使用する代わりに、プログラム的にSAS Viyaを操作するために使用することができます。 sas-viya CLIのbatchプラグインは、SAS Viya環境にコマンドラインからSASプログラムやコマンドをアップロードし、バッチ処理することを可能にします。プログラムをアップロードした後は、サーバ側でバッチ処理を実施するので、処理中にViyaのサーバとの接続を維持する必要はありません。 2.インストール方法の紹介 従来SAS9を利用しているユーザーは、sas.exeなどでSASプログラムをバッチで実行していたと思いますが、Viyaの場合はsas-viyaというコマンドラインツールを利用します。別途でインストールは必要ですが、Viyaのサービスへ接続できるところであれば、WindowsでもLinuxでも、任意のマシン上から遠隔でViya上でSASジョブの実行ができます。以下ではsas-viyaコマンドラインツールのインストールとセットアップ方法を紹介します。 まずは下記のサイトからお使いのOS(Linux, Window, OSX)に応じて、インストールファイルをダウンロードします。 https://support.sas.com/downloads/package.htm?pid=2512/ ① Windowsをご利用の場合の手順は以下となります。Linuxユーザーの方は、こちらを参照ください。 (1)ダウンロードしたzipファイルを解凍し、sas-viya.exeのフォルダの下にshift+右クリックし、「PowelShellウィンドウをここで開く」をクリックします。 (2)利用開始の前に、接続先のViyaサーバ情報の初期登録が必要ですので、下記のコマンドを実行します。聞かれた内容を下記のように入力し、アクセス先を定義します。 .\sas-viya.exe profile init こちらのステップは初めて利用する際に、一回だけ実施します。Service Endpointは繋ぎ先のURLを入力し、それ以外の”Output type”と”Enable ANSI colored output”については、画面に出力されたメッセージのフォーマットを指定するものですので、お好みの設定で構いません。もしわからない場合は、それぞれにtextとyにすれば良いです。 (3)接続先の情報を設定し終わったら、次はサーバへのログインです。下記のコマンドを実行して、IDとPWを入力し、ログインします。 .\sas-viya auth login

Analytics
自然言語処理とSAS (3)

こんにちは!SAS Institute Japanの堀内です。今回も自然言語処理について紹介いたします。 前回の投稿では、実際にSASを使って日本語の文章を扱う自然言語処理の例を解説しました。 最終回の本投稿ではその応用編として、自然言語処理の代表的なタスクとSASによる実装方法を紹介します。なお、ここでいうタスクとは「定式化され一般に共有された課題」といった意味になります。自然言語処理には複数のタスクがあり、タスクごとに、共通する部分はあるとはいえ、問題解決のアプローチ方法は基本的に大きく異なります。SASには各タスクごとに専用のアクションセット1が容易されています。 要約タスク その名の通り文章を要約するタスクです。SASではtextSummarizeアクションセットで対応可能です。 ここでは、NHKのニュース解説記事「気になる頭痛・めまい 天気が影響?対処法は?」(https://www.nhk.or.jp/kaisetsu-blog/700/471220.html) の本文を5センテンスで要約してみましょう。 import swat conn = swat.CAS('mycashost.com', 5570, 'username', 'password') conn.builtins.loadActionSet(actionSet='textSummarization') conn.textSummarization.textSummarize(addEllipses=False, corpusSummaries=dict(name='corpusSummaries', compress=False, replace=True), documentSummaries=dict(name='documentSummaries', compress=False, replace=True), id='Id', numberOfSentences=5, table={'name':CFG.in_cas_table_name}, text='text', useTerms=True, language='JAPANESE') conn.table.fetch(table={'name': 'corpusSummaries'}) numberOfSentencesで要約文のセンテンス数を指定しています。結果は以下の通りです。 'まず体調の変化や天気、気温・湿度・気圧などの日記をつけ、本当に天気が影響しているのか、どういうときに不調になるのかパターンを把握すると役立ちます。 気温・湿度以外にも、気圧が、体調の悪化や、ときに病気の引き金になることもあります。 私たちの体は、いつも耳の奥にある内耳にあると言われている気圧センサーで、気圧の変化を調整しています。 ただ、天気の体への影響を研究している愛知医科大学佐藤客員教授にお話ししを伺ったところ、「台風最接近の前、つまり、気圧が大きく低下する前に、頭が痛いなど体調が悪くなる人は多い」ということです。 内耳が敏感な人は、わずかな気圧の変化で過剰に反応し、脳にその情報を伝えるので、脳がストレスを感じ、体のバランスを整える自律神経が乱れ、血管が収縮したり、筋肉が緊張するなどして、その結果、頭痛・めまいなどの体に様々な不調につながっているのです。' 重要なセンテンスが抽出されていることが分かります。   テキスト分類タスク 文章をいくつかのカテゴリに分類するタスクです。その内、文章の印象がポジティブなのかネガティブなのか分類するものをセンチメント分析と呼びます。ここでは日本語の有価証券報告書の文章をポジティブかネガティブか判定してみます。使用するデータセットは以下になります。 https://github.com/chakki-works/chABSA-dataset (なお、こちらのデータセットには文章ごとにポジティブかネガティブかを示す教師ラベルは元々付与されておりませんが、文章内の特定のフレーズごとに付与されているスコアを合算することで教師ラベルを合成しております。その結果、ポジティブ文章は1670文章、ネガティブ文章は1143文章、合計2813文章になりました。教師ラベルの合成方法詳細はこちらのブログをご覧ください。) pandasデータフレームにデータを格納した状態を確認してみましょう。 df = pd.read_csv(CFG.local_input_file_path) display(df)

Analytics
自然言語処理とSAS (2)

こんにちは!SAS Institute Japanの堀内です。今回も自然言語処理について紹介いたします。 第1回目の投稿では、最近の自然言語処理の応用例とSAS社が携わった自然言語処理関連の実案件の概要を紹介しました。 第2回目の本投稿では実際にSASを使って日本語の文章を扱う自然言語処理の例を解説していきます。 テキストデータって何? 自然言語処理を語る前に、自然言語処理が処理対象とするデータのことを知る必要があります。自然言語処理で扱われるデータはテキストデータと呼ばれています。ここからはテキストデータがどういうものか探っていきます。 テキストとは以下のようなものです。 「自然言語処理で扱われるデータはテキストデータと呼ばれています。本投稿ではテキストデータがどういうものか探っていきます。」 何の変哲もない日本語の文章です。日本語以外の言語で書かれた文章ももちろんテキストと呼ばれます。 ではテキストデータとは何でしょう?データと言うからには何らかの構造を持っていると考えます。例えば行と列が与えられたテーブルデータがわかりやすい例です。 テキストデータと呼ぶとき、テキストに何らかの構造を与えられたものを想起すると良いかと思います。上で挙げたサンプルのテキストをテキストデータに変換してみましょう。 ["自然言語処理で扱われるデータはテキストデータと呼ばれています。",  "本投稿ではテキストデータがどういうものか探っていきます。"] これは句読点でテキストを区切り、リストに格納した例です。やりかたは他にもあります、 [["自然言語処理",  "で", "扱われる", "データ", "は", "テキストデータ", "と", "呼ばれて", "います", "。"],  ["本投稿", "では", "テキストデータ", "が", "どういうもの", "か", "探って", "いきます", "。"]] これは先ほどの例で2つのテキストに区切ったうえで、それぞれのテキストを更に単語ごとに区切って別々のリストに格納した例になります。これをテーブルデータのように整えると、 ID COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9 COL10 1 自然言語処理 で 扱われる

Analytics
製造業における DX と SQC

こんにちは、SAS Japan の西井です。本ブログにアクセス頂きありがとうございます。私は 2019 年に SAS に入社しましたが、それまでは国内の自動車部品メーカーにて様々な化学素材や工業部材の基礎研究・量産化開発に 10 年以上携わって来ました。SAS 入社後は、国内の製造業のお客様へ業務課題解決のためのデータ分析のソリューション(ソフトウェアやサービス)を提供する仕事に従事しています。今回はそれらの経験を通じて感じた事をタイトルのブログ記事として記しました。製造業での DX 推進の一つのヒントになれば幸いです。 背景 近年、製造業におけるデジタルトランスフォーメーション (DX) が大きな注目を集めています。DX とは一般的に、データやデジタル技術を活用して、業務プロセスを変革し競争優位を確保していくことと定義されています (参照 1) 。 製造業で DX が求められる背景には、ビジネス環境の変化による製品競争力低下への強い危機感があると考えています。日本の製造業はこれまで、各社のコア技術を元にした高度な品質を有する製品群によって、長期にわたり競争力を維持して来ました。しかし2000年代以降、新興国の参入やサプライチェーンのグローバル化など様々なビジネス環境の変化により、その優勢性に陰りが見えるようになりました (参照 2) 。競争優位の再構築に向けて、単独の製品性能による価値だけでなく、バリューチェーンを横断する形での付加価値創出、例えばロジスティックの最適化や顧客サービスの高度化など、いわゆるビジネスモデルの変革へ向けた施策が多くの企業で試みられるようになりました。その際、重要な要素の一つがデジタル技術の活用であり、DX の概念と重なったため、最近より強く注目されるようになって来たと認識しています。 本ブログのスコープ 弊社 SAS Japan は国内の製造業のお客様へ分析ソフトやサービスの提供を行い、業務課題の解決や高度化への変革、DX 推進のサポートを進めております。その中でしばしばお客様から、このような DX の総論を聞いても、実感がわかない、自分の業務とどう関連するのかわからないというご意見をしばしば頂くことがあります。特に競争優位の中核である品質管理に関わっている技術者の方々にとっては、製造データを用いた生産・品質管理活動はかねてから実施しており、今後どのような変化が必要で具体的に何に着手して良いか理解しかねていると感じています。今回、そのような現場技術者の方や企業の DX 推進担当者の方々を対象に、一つの切り口の例として、これまで品質管理手法として長らく活用され今も活躍している SQC (Statical Quality Control: 統計的品質管理) にフォーカスを当て、どのように DX へ組み込み発展させることが可能か、提言したいと思います。 SQC とは SQC は、QC七つ道具などの可視化手法 (管理図など、参照

Analytics
自然言語処理とSAS (1)

こんにちは!SAS Institute Japanの堀内です。今回は自然言語処理について紹介いたします。 自然言語処理とは、人間が普段会話したりメールしたりする際に使う言語(日本語や英語など)を、一種の信号とみたてて、その信号を機械が理解し、機械によって意味のある出力を得られるように工夫して処理することを指します。”自然”と明記しているのは機械にとっての日常語であるプログラム言語や機械言語と区別するためです。近年のAIやディープラーニングの発展とともに、この自然言語処理の分野も驚異的な進歩が見られ、私たちの日常生活の様々な分野で実際に活用されるようになってきました。第1回目の本投稿では、その内のいくつかを紹介いたします。第2回目以降は、実際にSASを使った自然言語処理の例を解説していく予定です。最後まで読んでいただければ、自然言語処理のホットトピックの内のいくつかを実装レベルで把握することができるようになるかと思いますのでどうぞお付き合いください。 最近の自然言語処理の実務適用例 チャットボット フリーテキストを入力欄に書き込むと、それに応じてボット(プログラムされた自動応答マシン)が適切な返答をテキストで返してくれるものです。様々なウェブページやアプリケーションに内蔵されるようになってきました。 例えば、不動産検索アプリに内蔵されたチャットボットでは、希望の条件をフリーテキストで入力すると、条件に合う物件を瞬時にレコメンドしてくれます。これによりユーザーが不動産検索サイトで条件を指定したり、相談窓口に電話して担当者に希望を伝えたりする手間が省けるようになってきています。   文書検索 手元にある長文の文書(例えば小説や論文など)と類似する文書を探したいとき、皆さんはどうしていますか?検索キーワードをいくつかピックアップしてGoogleなどのサーチエンジンで検索する、というのが最もオーソドックスな方法かと思いますが、最近では文書をまるごとサーチエンジンに入力し、似ている文書を探してくる文書検索ができるようになってきました。似ている文書がどのくらい似ているのかという指標も併せて返してくれるので、大量の論文を検索しなければならないビジネスや研究分野においては、検索の手間が大幅に減り大変便利です。   自動採点 皆さんも学校の国語や英語の授業で、長文を読んで質問に対して答えを書くという長文読解問題を解いたことがあるかと思います。私はこの手の問題が大の苦手でした。なぜならまず長文を読まなければならないのと、答えも一定の長さの文章を書かなければならず、とても手間に感じていました。実はこれ、テストを受ける生徒が嫌がるだけでなく、採点をする先生も同じくらい嫌だったのではないかなと思います。生徒の書いた解答文を読み解き、模範解答とされる文章と意味的に合致しているかという判断を下さなければならないのは結構手間がかかるはずです。実は最近の自然言語処理の発展により、この採点の部分を自動化することができるようになってきています。生徒の書いた文章と模範解答文との意味的距離をモデルが計算し、意味が近ければ正解、遠ければ不正解とすることができます。 また、長文のどの部分が解答となる要素を含んでいるか、というところまで判断し、解答文を自動作成することもできるようになってきました。これはQAタスクと呼ばれる自然言語処理の代表的なタスクの直接的な応用例になります。   オートフィル機能・スペルチェック機能(ライティング支援機能) 文書をタイピングする際、先読みして候補の単語をレコメンドしてくれたり、タイプした文のスペルチェックをしてくれたりする機能を皆さんも使ったことがあるかと思いますが、最近のものは複数行のセンテンスをレコメンドしてくれるようになってきました。またプログラミングの支援機能として書きたい内容をフリーテキストで書くと、該当のコードを提案してくれる機能がGitHubに実装されるなど、世の中はますます便利になりつつあります。(今私はブログを書いているわけですが、書きたいことの概要だけを書くと実際のブログ記事が提案されるようになったらどんなに仕事が捗るかと思います。) このように、これまで人間が苦労をして行っていた言語処理を機械ができるようになってきました。上にあげた例は実務適用例のごく一部です。様々な分野で自然言語処理が適用されようとしています。では、実際にSASではどのような事例が扱われているのでしょうか?   SASによる事例紹介 ここではSASがこれまで手掛けてきた自然言語処理のプロジェクトの一部を紹介します。 MR活動最適化 フランスの製薬企業において、SNSデータを解析することでKOL (Key Opinion Leader: 製薬企業の販売促進に影響力を持つ医師などの専門家) のセグメンテーションを行い、MR活動の最適化を行いました。SNSデータの解析にVTA¹が用いられました。 紹介記事: https://www.linkedin.com/pulse/how-does-hcp-behavioral-segmentation-help-build-full-olivier-bouchard/   院内有害事象発生防止の取り組み ノルウェー北部の中規模病院にて院内有害事象発生の未然防止のため標準的なツールGTT(トリガーツール)を半自動化する改良を加えることで、同等の精度を保ちながら院内有害事象の発見に要する時間を94%削減させました。電子カルテにはフリーテキストで記載された様々な様式の文書がありますが、そこから院内有害事象のトリガーとなる事象を抽出する部分にSASの自然言語処理の技術が使われました。 紹介記事: https://www.sas.com/da_dk/customers/helse-nord-patient-safety.html   有害事象発生予測 市販後の医薬品安全性監視において、FDA(アメリカ食品医薬品局)に寄せられた患者テキストの内、対象とする有害事象の発生を真に報告しているものをディープラーニングにより自動抽出する試みがなされました。テキスト解析とそれに続くディープラーニングによる予測モデルの構築にSASの技術が使われました。 紹介記事: https://communities.sas.com/t5/SAS-Global-Forum-Proceedings/Developing-a-SAS-Deep-Learning-MedDRA-encoder-MedDRA-DeepCoder/ta-p/735360   院内感染発生状況モニタリングシステム デンマーク南部地域一体の病院における、院内感染発生状況をモニタリングするシステムの開発が行われましたが、フリーテキストで記載された電子カルテの文書の中から、院内感染が疑われる箇所を抽出するアルゴリズムにSASの自然言語処理の技術が使われました。 紹介記事: https://www.sas.com/da_dk/customers/the-region-of-southern-denmark.html   消費者安全に関する報告のテキスト解析 消費者安全を担当するアメリカの政府機関に寄せられた消費者による様々な商品の安全性に関する報告文書を、VTAで解析し, VA²で可視化することで、単なる検索では得られないインサイトを得られることが分かりました。

Analytics
0
電力平準化問題に対するSASのアプローチ(2)

はじめに 前回のブログでは、電力平準化問題が数理最適化のスケジューリング問題として扱えること、SASのCLP Procedureで簡単にモデリング可能であることを紹介しました。今回は具体的にサンプル問題でCLP Procedureの使い方を見ていきます(ブログ末尾にサンプルコード記載)。 CLP Procedureの使い方 ここではプロシジャの使い方を分かりやすく示すため、図1のような3タスク、2設備の簡略化された問題のスケジューリングを例として説明します。タスクの詳細な設定は表1の通りとします。   中身の詳しい説明に入る前に、一つだけ最適化の処理で理解しておくべき概念として、Resourceというものを紹介します。Resourceとはタスクを実行するために必要な何かしらの資源で、CLP Procedureによるスケジューリングでは「ある時間帯の使用電力がXである=電力という資源をX占有する」のように読み替えることがポイントです。図1を例にとると、全体のResourceとしては電力設備M1とM2が1つずつ、電力は設定した電力上限分が用意されており、タスクA実行中は電力設備M1というResourceを1つ、電力というResourceを電力波形で表される分だけ各時間で占有する、と見なすことができます。最終的に実行可能なスケジュール(同じ時間帯に複数のタスクが同じ設備で実行されない、電力上限を超過しない)を作成することは、各タスクが上限の範囲内で上手くResourceを分け合うような割り当てを作成することに置き換えられます。 では、実際にSASコードでCLP Procedureを呼び出してスケジューリングを行う部分ですが、必要なのは以下のコードだけです。 proc clp actdata=act resdata=res schedtime=outtime schedres=outres; run; “schedtime”と”schedres”は出力先データセットの指定なので、ユーザーが用意する必要があるのは入力データの”actdata”と”resdata”のみです。では、それぞれのデータセットの内容を確認してみましょう。 “resdata”ではResourceの設定を行います。上での説明の通り、電力設備M1とM2が1つずつで、使用可能な電力総量の上限が“12”であることを表現しており非常に簡潔な設定です。 “actdata”はスケジューリングの対象となる最小要素であるActivityの設定を行います。今回の例では、タスクを図1のように分割したフェーズそれぞれを一つのActivityと考えます。こちらのデータセットは様々な要素が一行に並んでいるのでやや複雑ですが、設定項目は大まかに5種類の系統に分かれます。 まず_ACTIVITY_列では、各Activityにそれぞれ固有のIDを設定します。タスクAを例にとると、各フェーズの電力使用に当たるA01~A05と、タスク全体として設備M1を使用することを表すA00を設定しています。今回の問題では「設備M1を使用している間電力を使用する」という前提なので、A00の_DURATION_とA01~A05の合計が一致していることが確認できます。問題によっては「待ち時間などで使用電力0だが設備は占有したまま」のような状況で、両者の_DURATION_が異なる設定もあり得ます。 _SUCCESSOR_は前後関係を設定する対象のActivityを示しており、前後関係の種類と程度は_LAG_と_LAGDUR_で指定します。例えばFSは、「当該ActivityのFinishと_SUCCESSOR_で指定するActivityのStartの差が_LAGDUR_で指定する値以上」を示しています。今回の例では一つのタスクを分割したフェーズに相当するActivityは常に間を空けることなく実行されるため、_LAG_=FSE(FinishとStartが_LAGDUR_にEqual)、_LAGDUR_=0と設定しています。6行目のように、「タスクAの後3時間単位空けてタスクBを開始する」という業務的な意味での前後関係を表すのにも使用できます。また1行目のA00では、_LAG_=SSE(StartとStartが_LAGDUR_にEqual)でA01と開始が一致するように設定されていることにも注意が必要です。設定の詳細はマニュアルをご覧ください。 _ALIGNDATE_と_ALIGNTYPE_の組み合わせは_SUCCESSOR_と_LAG_の関係に似ていて、当該Activityと_ALIGNDATE_で指定した期日の間に_ALIGNTYPE_で指定する前後関係を設定します。例えば作業に着手可能になる時期や納期を表すのに使用でき、12行目では_ALIGNTYPE_=FEQ(Finishが_ALIGNDATE_=24にEqual)で「タスクB(のフェーズ5)が時刻24丁度に終了すること」を指定しています。 この設定でCLP Procedureを実行すると以下のような結果が得られ、時間に関する結果の”schedtime”とResourceに関する結果の”schedres”が出力されます。”schedtime”は各Activityをどの時間枠に割り当てるかという関心のある結果そのもの、”schedres”には例えば(今回の問題とは異なり)タスクを実行する設備にも選択肢がある場合のResourceの割り当てが出力されています。 最後に少しデータの加工が必要ですが、以下のようにガントチャートや電力波形に可視化して、諸々の条件が満たされたスケジュールになっていることが確認できます。図2 では"resdata"(表2)で指定した、「使用可能な電力総量の上限が“12”」を下回っていることが確認できます。 なお前回も記載しましたが、「ピーク値をどこまで下げることができるか?」を知りたい場合は、「使用可能な電力総量の上限」の指定値を下げて計算し、その条件を満たすスケジュールが作成可能かを調べることで下限を得ることができます。 まとめ 本ブログでは電力平準化問題を例として、CLP Procedureの使い方を見てきました。手順の中心となる入力データ準備の部分は、他のプログラミング言語で用意したものを読み込ませても良いですし、規模が小さければExcel上で作成してしまうことも可能です。SAS言語の知識も最適化の知識も最小限で、便利にスケジューリング機能が使えると感じていただけたなら幸いです。(反響があれば、設備の割り当ても考える場合など、より高度なモデリング方法についても取り上げます) サンプルコード 入力データは全てdataステップで作成しています。ganttプロシジャはclpプロシジャの結果である"schedtime"をほとんどそのまま使用できます(今回はグループ化の処理だけ追加しています)。使用電力の棒グラフについては、今回説明していないデータ加工が多少必要になるため、ソースコードからは割愛しています。 data res; input _RESOURCE_ $ _CAPACITY_; datalines; M1 1 M2 1 El 12 ;  

Analytics
0
電力平準化問題に対するSASのアプローチ(1)

はじめに 2022年も半ばを過ぎましたが、今年は何かと電力需給関係の話題を耳にすることが多くなっています。まず3月下旬には、直前に発生した福島県沖地震の影響で火力発電所が停止したことと寒波が重なり、東京電力と東北電力の管内で電力需給ひっ迫警報(予備率3%以下)が発令されました。そして6月下旬にも想定外の猛暑により、東京電力管内で電力需給ひっ迫注意報(予備率5%以下)が発令されています。事業者の皆様にとっても、政府からの節電要請など対応の必要な課題の一つではないでしょうか。 さて、本ブログでは製造業のスケジューリングを例にとって、使用電力の平準化(ピーク時間帯をシフトする、またピークそのものを下げる)問題に対するSASのアプローチをご紹介します。そもそも一般的なスケジューリング問題は数理最適化問題として扱えることが知られていますが、電力平準化問題も同様の枠組みで解決可能です。数理最適化によるスケジューリングは事例も豊富で歴史もある分野なのですが、通常の最適化エンジンを使用したスケジューリング問題のモデリングには背景にある数理最適化の理解が必要不可欠で、経験の無い方にとっては中々手を出しにくい代物というのが実情です。一方SAS Optimization(またはSAS/OR)にはスケジューリング問題専用の機能があり、CLP Procedureにフォーマットに従ったデータを与えるだけで、ほとんど数理最適化の理論を意識することなく簡単にモデリングすることができます。SASにはあまり最適化のイメージは無いかもしれませんが、本ブログをきっかけに意外と便利な機能が揃っていることを知っていただけたら幸いです。 問題設定 本ブログのスケジューリングで対象にするタスクとは、製造業における一連の生産プロセスのように、一度開始すると所定時間まで途中で中断することのできない作業のまとまりを指し、その間継続的に電力を使用するものとします(タスクごとに使用電力の推移がどうなるかは、過去の実績や予測としてデータ化されている必要があります)。 そして「使用電力を平準化する」とは、非常に単純に表現すると図1のように、使用電力の大きいタスクの時間的重なりをできるだけ解消してピークを下げることです。もちろん現実の問題では、設備の数や納期など様々な制約が存在するので、それらを考慮したスケジュールを作成する必要があります。 では次に、スケジューリング問題として扱いやすくするため現実の問題に対して行う、二つの側面からの近似を説明します。一つ目は時間軸に関する近似で、最小の時間単位を決めてその単位に粒度を丸めます。例えば30分単位で1日分のスケジュールを立てる場合、各タスクの所要時間も30分単位に切り上げて丸めて、「1日分48個の時間枠のどこからどこに割り当てるか」という処理を行うようにします。もう一つは電力波形に関する近似で、もとの波形を階段状に近似します。階段状の近似では、実際の電力波形の傾向が変わるなどキリの良い時点で分割して(フェーズに分割)、各フェーズの使用電力は常に期間中の最大値と同じとみなすような近似を行います。30分単位のスケジューリングを行う場合は、フェーズの所要時間も30分単位になるよう切り分けます。ここでは実際の電力波形を四角いブロックで覆うように近似していますが、もとの波形から多めに余裕を見て使用電力を設定している状況に該当しますので、このシミュレーションで電力ピークを削減できれば、実際にはもっと大きく削減できる可能性があるということになります。「時間軸はどれくらい細かく設定するか」や「タスクを何フェーズに分割するか」は、最終的なスケジュールの精度に影響しますので、問題の設定者が処理時間(細かくすればするほど計算の処理時間は伸びる)との兼ね合いで決定していく要素になります。電力に限定すると、電力会社の集計が30分単位なので、30分単位のスケジューリングには妥当性があります。 このような設定のタスクが複数存在してそれぞれのタスクを実行可能な設備が決まっている場合に、「各タスクをいつ開始するか」を上手く調節して、使用電力合計のピークが所定の上限を超えないようなスケジュールを作成することが今回の目的です。 本手法で行うのは与えた使用電力の上限を超えないスケジュールを作成することなので、いくらまでピーク値を下げられるかは自動的には求められません。通常は業務的に意味のある目標値を指定しますが、「ピーク値をどこまで下げることができるか?」を知りたい場合は、電力上限の指定値を変えて複数回実行することで求められます。指定値が厳しすぎて実行可能なスケジュールが無い場合は解なしと出るので、そこに至るまで少しずつ指定値を下げて再実行する、もしくはそのような処理を自動で行うシステムを実装します。 以下はある程度複雑な問題(30分単位1週間分、10設備、20タスク、上限10kW)を解いた時の結果イメージです。弊社では実際のプロジェクトでも使用電力平準化の問題に取り組んだ事例があり、階段状近似によって実際より各タスクの使用電力を過大評価している分を加味しても、最適化によって作成したスケジュールの方が実績よりピークが低くなることを示せました。 次回はサンプル問題でCLP Procedureの使い方を詳しく説明します! まとめ 最後に電力平準化問題のビジネスインパクトについてですが、この問題で行っているのは使用電力のピーク値の削減で、使用量そのものを削減している訳ではない(合計すると同じ)ことに注意が必要です。電力会社との契約はピーク値に基づいて決まるため、それを小さくすることができれば一定のコスト削減効果はあります。また契約によっては時間帯によって料金が異なるため、高い時間帯からピークをずらせればその分だけのコスト削減も見込めます。ただし事業規模にもよりますが、この両者を総合しても、電力平準化だけで十分な投資対効果を得るのは難しい可能性もあります。一方、節電要請への対応はコストだけに還元できない社会的意義もあり、今後のディマンドレスポンス進展や、既に今冬にも予想されている電力ひっ迫への対応など、昨今の不安定な情勢へのBCPの一つとして十分に検討に値するテーマであるとも考えています。また同じような考え方で、より利益に直結するスケジューリングを検討することも可能です。 SASでは既存のユーザー様に対するライセンス追加や活用方法のアドバイス、既存・新規関わらずドメイン知識の豊富なコンサルタントによるプロジェクト化の支援など幅広く受け付けておりますので、ご興味を持たれた方は是非ご連絡ください。

Analytics | Learn SAS | Students & Educators
見習いデータサイエンティストが思うキャリアの選び方 【アナリティクスを活用するキャリア: SAS Japan】

アカデミア向けにアナリティクス・データサイエンスのキャリアを紹介するイベント「SAS アナリティクス・キャリアシンポジウム」において、SAS Institute Japan 株式会社 コンサルティングサービス統括本部のクラウス 舞恵瑠 氏が講演しました。本イベントは、「データサイエンティストになりたい」と考える学生が業務内容やキャリアをイメージできるようになることを目指し、2021年12月22日(水)に開催されました。前回の記事はこちら。 「大学院のときに学会に参加し、『もっと数学をやりたい』と気づいたときには、すでに就活が終わっていました…」と振り返るクラウス氏は、大学院ではオペレーションズ・リサーチを専攻していました。「やりたいことが分からないから」という理由でコンサルティングファームに就職し、システムの導入支援の業務につきましたが、在学中に参加した学会で芽生えた「数理的な手法で問題解決をしてみたい」という思いが強くなり、SAS Japanへの転職を決意します。 クラウス氏がSASで携わっている直近のプロジェクトのテーマは、「不良債権回収業務の回収益向上」というものです。通常、債務の返済を督促するときは電話をかけますが、人によっては訴訟に発展してしまう可能性もあります。そこで、返済状況や債務者のタイプによって督促の方法を変更したり、場合によっては債務を減額する提案をするほうが長期的には回収額が向上する場合があったりします。どのような督促・回収方法を取るのがよいのか、回収担当者の意思決定を支援するために、強化学習や最適化手法といったデータ分析を活用します。 「一般的なプロジェクトには業務フローがありますが、それぞれのフェーズにおいて必要となるスキルや知識は異なります」とクラウス氏は言います。プロジェクトのフェーズは①現状分析/効果検証、②要件定義、③設計/開発/テスト、④導入支援、⑤本番稼働、の5つに分けられます。それぞれのフェーズにおいて、①分析とドメイン知識、②コミュニケーション、③エンジニアリング、④コミュニケーション、⑤エンジニアリングのスキルが重要になります。 分析スキルのベースには線形代数、微分、統計などの数学的な力があり、それを活用するためにSASやPythonなどのツールやプログラミングのスキルがあります。業界やクライアントの業務に関する知識であるドメイン知識は、クラウス氏によると「非常に重要なもの」ですが、一方で「学生の間に身につけることは難しい」ものです。コミュニケーション・スキルは、クライアントの課題を明確にするためにヒアリングを実施し、また、プランや結果をクライアントにフィードバックするための資料を作成し、わかりやすく説明するためのスキルです。エンジニアリング・スキルは、参画するプロジェクトにもよりますが、GithubやSQLなどのテクノロジーを扱う技術が求められる傾向にあります。このうち、分析スキルは大学の授業などを通して、コミュニケーション・スキルはゼミなどを通して学生のうちに身につけることができそうです。 「これらのスキルをすべて伸ばしていくことはもちろん望ましいですが、私の現在の課題としては、より高度な分析スキルを身につけることです。そのためには、独学、勉強会、YouTubeなどさまざまな勉強法がありますが、一番大切なのは実務経験だと考えています」とクラウス氏は述べます。「学生にとっては実務経験を得ることは難しいですが、就職したあとに積極的に実務に携わり、経験を通してスキルを向上させていく意欲が大切です」と学生にエールを送りました。

Analytics | Students & Educators
0
本当の原因は何か?:潜在アウトカムによる因果効果の定義

はじめに   データに基づいた意思決定が必要とされる場面が近年ますます増えており、そういった際には、データからいかに因果関係を導き出すかが非常に重要な問題です。”因果”を統計学的に捉え、いかにしてそれに迫るかは、統計的因果推論として体系化がなされています。SAS Blogでは、前回の記事からこの統計的因果推論に関する連載コラム・シリーズが始まりました。  因果関係を統計学的に導くことを目的とする統計的因果推論には、主に2つの枠組みがあります。1つは潜在アウトカムを用いるRubin流の考え方、そしてもう1つが構造的因果モデルを用いるPearl流の考え方です。これら2つの考え方は相反するものではなく、Pearl流の因果推論では、ある変数の特徴とそれらの関係を記述するために構造的因果モデル  (SCM; Structural Causal Model) が用いられています。このSCMには対応するグラフィカル因果モデルがそれぞれ存在しており、その際に使用されるのが有向非巡回グラフ (DAG; Directed Acyclic Graph)※1です。このDAGはRubin流の因果推論においても、変数間の関係を視覚的に理解するために補助的に利用がされています。本コラム・シリーズでは前者の潜在アウトカムの枠組みでの因果推論について紹介を行います。今回は特にその根底となる潜在アウトカムについて、また、それを用いた因果関係の定義について説明します。  ※1 補足資料を参照    相関関係と因果関係   相関関係とは、ある2つの変数において、一方が増加するにつれてもう一方も増加(減少)する傾向があるという双方向の関係を意味しています。これに対し因果関係とは、ある2つの変数のうち、一方の操作可能な変数(原因)の値を変化させる(介入を行う)と、もう一方(結果)の値が変化するという、原因から結果への一方向的な関係です。これらの関係の違いを理解することは社会生活を送る上で非常に重要です。例えば、相関関係がある有名な例として、年収と血圧の関係があります。この2つの変数の間には正の相関関係(年収が高くなるほど血圧が高い傾向)があります。しかし、年収を上げるために血圧を上げる(Ex, 暴飲暴食を行う)ことは妥当でしょうか。もしくは、血圧を下げるために年収を下げる(Ex, 転職をする)ことは受け入れられることでしょうか。おそらく多くの読者の方の意見は「No」であるかと思います。この例からも察することができるように、相関関係と因果関係の存在とその方向というものは必ずしも一致しません。また、これらの関係を混同することは大きな不利益につながる可能性があります。上記の例であれば、真には血圧の増加は年収増加に対して因果的な効果を持たないのにも関わらず年収を上げるために無駄に暴飲暴食を行ってしまうことで、結果として不健康につながる可能性があります。   このように興味の対象が因果関係、因果効果である場面は比較的多く存在します。統計的因果推論 (causal inference) とはこれらを形而的、哲学的にではなく、統計学的に考える学問分野です。また、単に因果推論と言われる場合もあり、コラム中で単に因果推論と呼称した場合には、統計的因果推論を意味していることにご注意ください。データから因果効果を推定するために「傾向スコア」を用いた手法など様々なものが用いられています。しかし、これらの手法は適用さえすれば因果効果を適切に推定することができるというわけではありません。因果推論を行うにあたっては因果関係を検討する集団はどういった集団であるか、考える因果効果はどのような介入の効果であるかといった因果的な疑問 (causal question) を明確にすることがまず重要です。その上でデータへの手法の適用があります。また、それぞれの手法は異なる仮定を必要とするため、無条件で因果効果を求めることはできず、その仮定が目の前にあるデータに対してどの程度成立するものであるかといった議論も必要です。 加えて、推定する対象が手法間で異なるといった点や真の関係をゆがませる要因は何が想定されるのかなど、他にも様々な事を考慮する必要があり、慎重に議論を行っていくことが大切です。本コラムでは潜在アウトカムの枠組みでの因果推論の理論(考え方)と、一部の因果効果の推定手法についてのみ取り扱いますが、現実的にはそのような総合的な議論が重要です。    本コラムにおける用語   今回のコラムでは、心臓移植とその5日後の生存の間の因果関係を具体例として考えます。すなわち、心臓移植という介入が5日間の生存というアウトカムに対して、因果効果を持つかどうかを検討します。医療の分野では原因として考える要因を介入 (intervention) や処置 (treatment) 、曝露 (exposure)、結果変数のことをアウトカム (outcome) と呼ぶことが一般的であり、このコラム・シリーズでは、具体例として主に医療関連の話題を取り上げるため、基本的にはこのような呼称を行います。経済・金融系の分野では、因果効果があるかどうか検討したい要因が施策等である場面があるかと思いますが、因果推論の理論に関して変わりはないので、本コラムの例を読者の方がそれぞれ抱えている疑問に置き換えて考えるとよいでしょう。ただ、今後紹介する因果推論に関する様々な仮定の妥当性や分析に用いられるデータの特徴は、それぞれの分野によって異なりますので、その点ご理解ください。    潜在アウトカムによる因果効果   それでは早速、例を用いて潜在アウトカムとは何か、因果関係とは何かを考えていきます。具体的には心臓移植(介入)が5日後の生存(アウトカム)に対して因果的な効果があるのかどうかを考えます。この関係を検討するために、まずゼウスとヘラというある2人に対し、ともに介入を行うことを想定し、何らかの方法で以下の結果が得られたものとします。  ゼウスは1月1日に心臓移植を受けると、その5日後には死亡している。 ヘラは1月1日に心臓移植を受けると、その5日後は生存している。   このもしもの結果(介入を行う場合の結果)が分かったとき、心臓移植はゼウスとヘラの5日間の生存に対してそれぞれ因果効果を持つと結論付けることは可能でしょうか。一見すると、ゼウスは心臓移植後に死亡し、ヘラは生存していますので、ゼウスに対してはnegativeな因果効果(心臓移植により死亡した)、ヘラに対してはpositiveな因果効果(心臓移植により生存した)があったように見えます。しかし、その結論は正しいのでしょうか。もしかすると心臓移植を受けずとも、ゼウスは5日後には亡くなり、ヘラは生きていたのかもしれません(結果は変わらなかった)。もしくは心臓移植を行わなければ、逆にゼウスは生存し、ヘラは亡くなっていたのかもしれません。つまり因果効果があるかどうかについては、この結果だけでは判断することはできません。   では、どのような状況であれば因果関係かどうかを判断することができるでしょうか。その1つのアイディアがもし介入を受けなかったらどのような結果が得られたのかを考えることです。実際にはゼウスもヘラも介入を受けるか受けないかのいずれかしか取り得ないため、必ずどちらか一方の結果は現実的には得られない(反事実)ものとなってしまいますが※2、先ほどと同様に何かしらの方法でその場合の結果を知ることができたと仮定し、それぞれの場合の結果を比較するわけです。そして、それらの値が異なるのであれば介入の因果効果があるとし、同一であるのならば因果効果がないと判断します。   ゼウスとヘラに関しては、以下のようなifの結果が得られたとします。  ゼウスは1月1日に心臓移植を受けないと、その5日後は生存している。 ヘラは1月1日に心臓移植を受けないと、その5日後は生存している。   先程の結果も含め、介入を受ける場合と受けない場合の結果をまとめたものが下図です。   介入を受けない場合の結果が得られたことにより、心臓移植はゼウスに対しては5日後の生存に対し因果効果を与えた(ネガティブな効果)、ヘラには因果効果を与えなかった(介入があってもなくても結果は同じ)と判断することができます。おそらく、この判断に関しては読者の方々も特に異論はないかと思います。この例のように、ある介入を受けた場合のifの結果のことを潜在アウトカム (potential outcomes)

1 4 5 6 7 8 15