Meridian:部門ファイルから、担当者のいるアクションへ。
ベトナムに4つの工場を持つ架空のメーカー、Meridian Components を題材にした構築事例です。以下の SAS 画面はすべて、構築に使った Viya 環境で2026年10月に取得したものです。数値もすべて、その環境が出したものです。
- 出発点となった部門ファイル
- 19出発点となった部門ファイル
- 40のクレンジングルールで修正した行
- 28,09840のクレンジングルールで修正した行
- 比較した欠品モデル
- 7比較した欠品モデル
- 公開したデシジョンが1件ずつ確認したアクション
- 306公開したデシジョンが1件ずつ確認したアクション
4つの工場、部門の数だけある「正しい数字」。
Meridian は4つの工場と4つの倉庫を、部門ごとのワークブックで回しています。シフト別の生産実績、購買の管理表、在庫の棚卸し、標準原価表です。部門ごとに自分たちの数字を持っていたため、週次会議は数字をもとに動くのではなく、数字の突き合わせから始まっていました。
誰にもファイルを手放すようには求めませんでした。SAS はファイルをそのまま読み込み、プロジェクトは5つのステージで構成されます。各ステージはプログラムのフォルダーで、すべてのプログラムの横にフローがあります。
- 判断
- ファイルはそのまま読み込み、修正はすべて SAS の中で、誰でも読めるコードで行う。
- 理由
- 使い慣れたツールはそのまま使えます。修正はすべて目に見えて再現でき、誰かの手元のコピーに埋もれることがありません。
- 使用ツール
- SAS StudioSAS Content

クレンジングは一度だけ、監査できるルールで。
19のファイルは、23の生テーブル、12のクレンジング済みテーブル、判断にそのまま使える23のゴールドテーブルになりました。40のクレンジングルールが28,098行を修正しました。テキストで入力された金額、3種類の形式が混在する日付、何通りもの書き方があるシフトコードなどです。ルールはそれぞれ、データ品質ログに1行ずつ記録します。
すべてのプログラムにフローがあるため、SAS Lineage はどのテーブルについても、それを作ったプログラムまでさかのぼり、それを読むレポートまでたどる経路を描けます。
- 判断
- ルール1つにログ1行、そしてすべてのプログラムにフローを。
- 理由
- ある数字の出どころを管理者に聞かれたら、答えは会議ではなく SAS Lineage でのワンクリックです。
- 使用ツール
- SAS Studio のフローDATA step と PROC SQLSAS Lineage

欠品を予測し、モデル同士を競わせる。
計画担当者の問いはシンプルです。どの倉庫のどの製品が、今後4週間で発注点を下回るのか。Model Studio は同じ特徴量(発注点に対する在庫、輸送中の在庫、直近の出荷、サプライヤーの遅延、季節)で7つの候補モデルを学習し、後半の週はテスト用に学習から除外しました。
学習から除外した週で最もランキング性能が高かった Forest を、チャンピオンとして Model Manager に登録しました。勾配ブースティングはチャレンジャーとして毎週コードで再学習されるため、チャンピオンの性能が落ちれば数字に表れます。
- 判断
- Forest をチャンピオンとし、勾配ブースティングをチャレンジャーとして残す。
- 理由
- Forest は一度も見ていないデータで最も良いランキングを示しました。チャレンジャーを残しておけば、チャンピオンの性能が落ち始めていないかがわかります。
- 使用ツール
- Model StudioModel Manager



業務の責任者が読めるルールで判断する。
スコアはまだアクションではありません。デシジョン Meridian_next_best_action はチャンピオンモデルを実行し、続いて2つのルールセットを通します。「アクションの選択」(6ルール)は、在庫ポジションに再発注が必要か、発注書の納期督促が必要か、製品に利益率の見直しが必要か、ラインの確認が必要かを決めます。「優先度・担当・レビュー」(14ルール)は、影響額に応じて優先度を設定し、担当者を選び、期限を決め、いつ2人目が確認するかを判断します。
デシジョンは SAS Micro Analytic Service に公開されるため、Web リクエストを送れるものなら何でも、何をすべきかを問い合わせられます。
- 判断
- しきい値はプログラムのコードではなく、ルールセットに置く。
- 理由
- サプライチェーンの責任者は、「直近の注文の60%でサプライヤーが遅れたら納期督促」を開発者なしで読み、変更できます。Intelligent Decisioning はすべての変更をバージョン管理します。
- 使用ツール
- Intelligent DecisioningMicro Analytic Service



毎週月曜に、同じロジックで実行する。
スケジュールされたジョブが毎週月曜06:00に動きます。Lantern で人が判断し解決した内容を読み戻し、今週の候補アクションを作り、それぞれを公開済みのデシジョンに通し、メッセージを下書きし、先週の結果を測定して、結果を Lantern に送ります。
バッチジョブもほかのすべてと同じ公開済みのデシジョンを呼び出すため、レポート上のアクションと画面上のアクションが食い違うことはありません。デシジョンサービスに接続できない場合、ジョブは停止し、空のリストを公開する代わりに先週のアクションを残します。
- 1Lantern から判断と解決内容を読み戻す
- 2候補アクションを作る
- 3すべての候補を Meridian_next_best_action に通す
- 4メッセージを下書きして確認する
- 5過去のアクションの後に何が起きたかを測定する
- 6アクション、結果、欠品リスクを Lantern に送る
- 判断
- ルールをコードにコピーせず、バッチジョブから公開済みのデシジョンを呼び出す。
- 理由
- 判断する場所は1か所だけです。ルールを1つ変えればすべてのチャネルが一度に変わり、ずれが生じません。
- 使用ツール
- SAS Job ExecutionPROC HTTPMicro Analytic Service
proc http url="&base./microanalyticScore/modules/meridian_next_best_action/steps/execute"
method="POST" in=_nq out=_na ct="application/json" oauth_bearer=sas_services;
headers "Accept"="application/json";
run;NOTE: Lantern decisions read into APP_ACTION_DECISIONS.
NOTE: Lantern resolutions read into APP_ACTION_RESOLUTIONS.
NOTE: Decision service answered all 306 rows (meridian_next_best_action).
ACT REORDER High 55 55 1,994,641,000
ACT EXPEDITE_PO High 47 47 181,319,000
ACT INVESTIGATE_LINE High 12 12 790,203,000
NOTE: Lantern gold_actions: {"rows": 306, "table": "gold_actions", "skipped": []}
NOTE: Lantern gold_stockout_risk: {"rows": 16800, "table": "gold_stockout_risk", "skipped": []}
NOTE: Lantern gold_model_metrics: {"rows": 11, "table": "gold_model_metrics", "skipped": []}すべてのアクションに担当者を1人、そして根拠を示す。
Lantern は各アクションに担当者を1人割り当て、SAS がなぜそれを挙げたのかを示します。発動したルール、在庫ポジションについてのチャンピオンの確率、そして優先度・担当者・期限を選んだルールセットです。担当者は仕事をし(サプライヤーに電話する、ラインを確認する、注文を出す)、行ったことを記録して解決します。
見える内容は役割で決まります。購買担当者には発注書が、シフトリーダーには自分のラインが表示され、データベースが行単位でそれを強制します。
- 判断
- 構築と統制を担う人には Viya のライセンスを、行動するすべての人には Lantern を。
- 理由
- 何百人もの現場の人が、Viya のライセンスなしで SAS の判断に基づいて動けます。彼らの判断はすべて、翌週の月曜に SAS へ戻ります。
- 使用ツール
- LanternPostgreSQL の行レベルセキュリティ


何が起きたかを測り、モデルを正直に保つ。
ジョブは毎週、解決済みのアクションをその後の結果と照らし合わせます。在庫は切れたか、発注書は期日どおりに届いたか、不良率は下がったか。結果は Lantern に送られ、アクションの横に表示されます。
モデルも同じ方法で評価します。チャンピオン、チャレンジャー、そして在庫水準だけで単純に順位付けする方法を、学習から除外した同じ1,100行でスコアリングします。そのうち138行が4週間以内に欠品しました。
- 判断
- すべてのモデルを同じ行で、単純なベースラインと並べて評価する。
- 理由
- 在庫水準で並べるだけの方法に勝って初めて、モデルは使う価値があります。チャンピオンはリスク上位300件で、ベースラインより13件多く欠品を捕捉します。
- 使用ツール
- SAS プログラムVisual AnalyticsLantern
学習から除外した同じ行での欠品モデル
| モデル | AUC | リスク上位300件で捕捉した欠品 |
|---|---|---|
| Forest(チャンピオン) | 0.939 | 133 / 138 |
| 勾配ブースティング(チャレンジャー) | 0.927 | 129 / 138 |
| 在庫水準のみ(ベースライン) | 0.918 | 120 / 138 |
AUC: 0.5 はコイン投げ、1.0 は完全。2026年10月20日に ins_02 で算出。


判断の記録
- 出発点
ファイルはそのまま読み込み、修正はすべて SAS の中で、誰でも読めるコードで行う。
SAS Studio, SAS Content
- クレンジングと追跡
ルール1つにログ1行、そしてすべてのプログラムにフローを。
SAS Studio のフロー, DATA step と PROC SQL, SAS Lineage
- 予測
Forest をチャンピオンとし、勾配ブースティングをチャレンジャーとして残す。
Model Studio, Model Manager
- 判断
しきい値はプログラムのコードではなく、ルールセットに置く。
Intelligent Decisioning, Micro Analytic Service
- 毎週の実行
ルールをコードにコピーせず、バッチジョブから公開済みのデシジョンを呼び出す。
SAS Job Execution, PROC HTTP, Micro Analytic Service
- Lantern で動く
構築と統制を担う人には Viya のライセンスを、行動するすべての人には Lantern を。
Lantern, PostgreSQL の行レベルセキュリティ
- 測定
すべてのモデルを同じ行で、単純なベースラインと並べて評価する。
SAS プログラム, Visual Analytics, Lantern
動作のしくみ
Lantern は Viya の週次ジョブが公開するテーブルを読み込むため、ワークスペースの数値はすべて実際の SAS の出力です。各部分がどこで作られたかは、上の各セクションで紹介しています。
Lantern の働きを見る。
デモは、実際のサプライチェーンのデータセットから作った架空のメーカー Meridian で動きます。サインインして、そのチームと同じように今週のアクションに取り組んでください。