Meridian: 부서별 파일에서 담당자가 있는 액션으로.
베트남에 공장 4곳을 둔 가상의 제조업체 Meridian Components를 대상으로 구축한 사례입니다. 아래의 모든 SAS 화면은 실제 구축에 사용한 Viya 환경에서 2026년 10월에 캡처했습니다. 모든 숫자는 그 환경이 만들어 낸 결과입니다.
- 처음 시작한 부서 파일
- 19처음 시작한 부서 파일
- 40개 정제 규칙으로 수정한 행
- 28,09840개 정제 규칙으로 수정한 행
- 비교한 품절 모델
- 7비교한 품절 모델
- 게시된 의사결정이 하나하나 확인한 액션
- 306게시된 의사결정이 하나하나 확인한 액션
공장은 4곳, 진실은 부서마다 하나씩.
Meridian은 공장 4곳과 창고 4곳을 부서별 워크북으로 운영합니다. 교대별 생산 실적, 구매 추적표, 재고 실사 결과, 표준 원가표가 그것입니다. 부서마다 자기 버전의 숫자를 갖고 있어서, 주간 회의는 숫자를 바탕으로 움직이기보다 숫자를 맞추는 일로 시작됐습니다.
누구에게도 쓰던 파일을 버리라고 하지 않았습니다. SAS가 파일을 있는 그대로 읽어 들이고, 프로젝트는 5단계로 구성됩니다. 각 단계는 프로그램 폴더 하나이고, 모든 프로그램 옆에는 플로우가 있습니다.
- 결정
- 파일은 있는 그대로 읽어 들이고, 모든 수정은 SAS 안에서 누구나 읽을 수 있는 코드로 합니다.
- 이유
- 사람들은 믿고 쓰던 도구를 그대로 쓰고, 모든 수정은 누군가의 사본 속에 숨지 않고 눈에 보이며 반복할 수 있습니다.
- 사용 도구
- SAS StudioSAS Content

한 번만 정제합니다. 감사할 수 있는 규칙으로.
19개 파일은 원시 테이블 23개, 정제 테이블 12개, 의사결정에 바로 쓸 수 있는 골드 테이블 23개가 되었습니다. 40개 정제 규칙이 28,098행을 수정했습니다. 텍스트로 입력된 금액, 세 가지 형식이 섞인 날짜, 여러 방식으로 쓰인 교대 코드 같은 것들입니다. 규칙마다 데이터 품질 로그에 한 줄씩 기록합니다.
모든 프로그램에 플로우가 있으므로, SAS Lineage는 어떤 테이블이든 그것을 만든 프로그램까지 거슬러 올라가고, 그것을 읽는 리포트까지 이어지는 경로를 그릴 수 있습니다.
- 결정
- 규칙 하나에 로그 한 줄, 그리고 모든 프로그램에 플로우.
- 이유
- 관리자가 어떤 숫자의 출처를 물으면, 답은 회의가 아니라 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 의사결정은 챔피언 모델을 실행한 뒤 두 규칙 세트를 거칩니다. “조치 선택”(규칙 6개)은 재고 포지션에 재주문이 필요한지, 구매 주문의 납기를 독촉해야 하는지, 제품에 마진 검토가 필요한지, 라인을 점검해야 하는지를 정합니다. “우선순위, 담당자, 검토”(규칙 14개)는 걸린 금액에 따라 우선순위를 정하고, 담당자를 고르고, 기한을 정하고, 언제 두 번째 사람이 확인할지 결정합니다.
의사결정은 SAS Micro Analytic Service에 게시되므로, 웹 요청을 보낼 수 있는 것이라면 무엇이든 무엇을 해야 할지 물어볼 수 있습니다.
- 결정
- 임계값은 프로그램 코드가 아니라 규칙 세트에 둡니다.
- 이유
- 공급망 책임자는 개발자 없이도 “최근 주문의 60%에서 공급업체가 지연되면 납기 독촉”을 읽고 바꿀 수 있으며, Intelligent Decisioning은 모든 변경의 버전을 관리합니다.
- 사용 도구
- Intelligent DecisioningMicro Analytic Service



매주 월요일, 같은 로직으로 실행합니다.
예약된 작업이 매주 월요일 06:00에 실행됩니다. Lantern에서 사람들이 결정하고 해결한 내용을 다시 읽어 들이고, 이번 주 후보 액션을 만들고, 각 후보를 게시된 의사결정에 보내고, 메시지 초안을 작성하고, 지난주 결과를 측정한 뒤, 결과를 Lantern으로 보냅니다.
배치 작업도 다른 모든 곳과 같은 게시된 의사결정을 호출하므로, 리포트의 액션과 화면의 액션이 서로 다를 수 없습니다. 의사결정 서비스에 연결할 수 없으면 작업은 멈추고, 빈 목록을 게시하는 대신 지난주 액션을 유지합니다.
- 1Lantern에서 결정과 해결 내용 다시 읽기
- 2후보 액션 만들기
- 3모든 후보를 Meridian_next_best_action에 보내기
- 4메시지 초안 작성 및 확인
- 5이전 액션 이후의 결과 측정
- 6액션, 결과, 품절 리스크를 Lantern으로 보내기
- 결정
- 규칙을 코드에 복사하지 않고, 배치 작업에서 게시된 의사결정을 호출합니다.
- 이유
- 결정하는 곳은 한 곳뿐입니다. 규칙 하나를 바꾸면 모든 채널이 한꺼번에 바뀌고, 어긋나는 것이 없습니다.
- 사용 도구
- 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": []}모든 액션에 담당자 한 명, 그리고 근거를 함께.
Lantern은 각 액션에 담당자 한 명을 지정하고, 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
- 정제와 추적
규칙 하나에 로그 한 줄, 그리고 모든 프로그램에 플로우.
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에서 실행됩니다. 로그인해 그 팀처럼 이번 주 액션을 처리해 보세요.