<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The SAS Data Science Blog</title>
	<atom:link href="https://blogs.sas.com/content/subconsciousmusings/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.sas.com/content/subconsciousmusings/</link>
	<description>Advanced analytics from SAS data scientists</description>
	<lastBuildDate>Wed, 23 Sep 2026 15:18:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6</generator>
	<item>
		<title>Beyond the dashboard: how SAS Viya Copilot lets curiosity lead the analysis</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/09/23/beyond-the-dashboard-how-sas-viya-copilot-lets-curiosity-lead-the-analysis/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/09/23/beyond-the-dashboard-how-sas-viya-copilot-lets-curiosity-lead-the-analysis/#respond</comments>
		
		<dc:creator><![CDATA[Sasha Karpinski]]></dc:creator>
		<pubDate>Wed, 23 Sep 2026 15:10:31 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AI governance]]></category>
		<category><![CDATA[augmented analytics]]></category>
		<category><![CDATA[SAS Visual Analytics]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<category><![CDATA[SAS Viya copilot]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=22440</guid>

					<description><![CDATA[<p>The most valuable dashboards often lead to another question. Which region drove the increase in sales? How did that compare with last year? Which products contributed most to the change? What started as a simple question about a dashboard has become a deeper analytical exploration. But traditionally, answering that next [...]</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/09/23/beyond-the-dashboard-how-sas-viya-copilot-lets-curiosity-lead-the-analysis/">Beyond the dashboard: how SAS Viya Copilot lets curiosity lead the analysis</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3><strong>The most valuable dashboards often lead to another question.</strong></h3>
<p>Which region drove the increase in sales?</p>
<p>How did that compare with last year?</p>
<p>Which products contributed most to the change?</p>
<p><a href="https://blogs.sas.com/content/tag/augmented-analytics/">What started as a simple question about a dashboard has become a deeper analytical exploration.</a> But traditionally, answering that next question can mean searching through other report pages, finding a different dashboard or asking an analyst or report designer to create an entirely new view of the data.</p>
<p>That creates a gap between curiosity and insight.</p>
<p>For business users viewing reports in <a href="https://www.sas.com/en_us/software/visual-analytics.html">SAS<sup>®</sup> Visual Analytics</a>, <a href="https://www.sas.com/en_us/software/viya/copilot.html">SAS<sup>®</sup> Viya<sup>®</sup> Copilot</a> helps close that gap. Instead of being limited to the questions a report was originally designed to answer, users can ask their own questions about the underlying data and explore the answers instantly.</p>
<p>Let's explore how Viya Copilot helps report viewers move beyond the dashboard and discover the insights that matter to them.</p>
<h2><strong>When the dashboard sparks curiosity</strong></h2>
<p>Reports and dashboards are designed to answer important business questions. They bring together the right data, metrics and visualizations to help users understand what is happening. In fact, the most useful dashboards should lead to new questions.</p>
<p>A dashboard might show overall sales performance, but a user might want to understand how sales changed in a particular region. A report might show profit by product, but the next question could be how those products performed over time. Or a user might want to see a familiar measure broken down by a category that isn't currently displayed.</p>
<p>Traditionally, answering these questions requires another step. Users might need to search through the report for an existing visual, navigate to another dashboard or ask another team to create a new report.</p>
<p>Viya Copilot introduces a more direct path.</p>
<h2><strong>When the next answer isn’t already in the report</strong></h2>
<p>When viewing a report, users can ask Viya Copilot questions about the underlying data using natural language. Copilot interprets the question, queries the available data and returns the result as a visualization.</p>
<p>For example, a user might ask:</p>
<ul>
<li>"Show me sales for the Northeast region."</li>
<li>"How did revenue change over the last 12 months?"</li>
<li>"Break profit down by product category."</li>
<li>"Which regions had the highest sales last quarter?"</li>
</ul>
<p>Copilot can use existing measures and columns from the report's data to answer these questions, applying the appropriate categories, measures, filters or ranks based on what the user asked.</p>
<p>This means users no longer have to search through report pages for the right chart or wait for another team to build a new view.</p>
<p>They can ask the question and explore the answer immediately.</p>
<h2><strong>From predefined views to self-service exploration</strong></h2>
<p>A report author's job is to create a focused analytical experience. That often means selecting the most important metrics, dimensions and visualizations for a particular audience.</p>
<p>But no report can anticipate every question a user might have. And it shouldn’t have to.</p>
<p>That's where conversational analytics can extend the value of a report.</p>
<p>With Viya Copilot, users aren't limited to the views that were originally included in the report. They can describe what they want to see and Copilot can create a new visualization to help answer the question.</p>
<p>This gives report viewers more room to explore without requiring report authors to build every possible analysis in advance. Business users can explore beyond the predefined dashboard while still working within the report's analytical context.</p>
<p>The result is a more dynamic experience: the report provides the starting point, and the user's questions determine where the analysis goes next.</p>
<figure id="attachment_22455" aria-describedby="caption-attachment-22455" style="width: 1212px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="wp-image-22455 size-full" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory1-1.png" alt="" width="1212" height="686" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory1-1.png 1212w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory1-1-300x170.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory1-1-1024x580.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory1-1-768x435.png 768w" sizes="(max-width: 1212px) 100vw, 1212px" /><figcaption id="caption-attachment-22455" class="wp-caption-text">Viya Copilot lets report viewers ask their own questions and generate new visualizations from the report’s underlying data.</figcaption></figure>
<h2><strong>Understanding how Copilot answered your question</strong></h2>
<p>Natural-language questions make analytics more accessible, but users also need to understand how their questions were translated into analytical results.</p>
<p>Viya Copilot provides transparency into how it interpreted a question and built the resulting visualization. By expanding the information pop-up, users can see which categories and measures Copilot selected from the available data, as well as the filters or ranks applied based on the question.</p>
<p>This transparency is especially important when a question requires a calculation that doesn't already exist in the report. Copilot can generate new expressions on the fly to create ad-hoc measures, such as aggregated or periodic calculations. For example, a report might contain sales and profit, but a user might want to understand profit margin. Or they might want to compare a measure across time using a periodic calculation.</p>
<p>When Copilot creates a new calculation, the expression logic is available alongside the visualization, allowing users to validate how the result was calculated.</p>
<p>Whether Copilot uses existing measures and columns or generates a new expression, users can see how their question translates into the analytical result. This helps make conversational analytics not only more accessible but also more transparent and trustworthy.</p>
<figure id="attachment_22458" aria-describedby="caption-attachment-22458" style="width: 1212px" class="wp-caption aligncenter"><img decoding="async" class="wp-image-22458 size-full" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory2.png" alt="" width="1212" height="686" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory2.png 1212w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory2-300x170.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory2-1024x580.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory2-768x435.png 768w" sizes="(max-width: 1212px) 100vw, 1212px" /><figcaption id="caption-attachment-22458" class="wp-caption-text">Users can see the data, measures and filters Viya Copilot used to translate their question into a visualization.</figcaption></figure>
<h2><strong>More freedom to ask, without giving up control</strong></h2>
<p>Self-service exploration doesn't mean giving users ungoverned access to data.</p>
<p>Governance remains part of that experience. The ability to explore beyond predefined views still operates within boundaries established by the report designer.</p>
<p>The report designer determines which data Viya Copilot can access when responding to a user's questions about the report. By default, only data items assigned to objects in the report are available to the viewer.</p>
<p>From there, report designers can choose to allow viewers to access any data item in the report's data source, even when that data item is not explicitly used in the report. Or they can disable the SAS Viya Copilot pane completely for report viewers.</p>
<p>That creates an important balance: viewers gain more freedom to follow their questions, while report designers and organizations retain control over the data available to Copilot.</p>
<figure id="attachment_22464" aria-describedby="caption-attachment-22464" style="width: 1212px" class="wp-caption aligncenter"><img decoding="async" class="wp-image-22464 size-full" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory3-1.png" alt="" width="1212" height="686" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory3-1.png 1212w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory3-1-300x170.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory3-1-1024x580.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/09/viyastory3-1-768x435.png 768w" sizes="(max-width: 1212px) 100vw, 1212px" /><figcaption id="caption-attachment-22464" class="wp-caption-text">Report designers can govern how viewers use Viya Copilot, including which data is available for exploration.</figcaption></figure>
<h2>From report viewing to insight discovery</h2>
<p style="font-weight: 400;">A dashboard doesn’t have to anticipate every question its viewers might ask. It can provide the context, trusted data and starting point, while giving users room to follow the questions that emerge.</p>
<p style="font-weight: 400;">Business users can move from consuming the analysis created for them to exploring the questions that matter to them, while remaining within the analytical and governance boundaries established by the report designer.</p>
<p style="font-weight: 400;">With SAS Viya Copilot, the report becomes less of a fixed destination and more of a starting point for exploration. The dashboard provides the starting point. The questions users ask determine where the analysis goes next.</p>
<h3><a href="https://www.sas.com/en_us/software/viya.html?gclsrc=aw.ds&amp;gad_source=1&amp;gad_campaignid=13572272525&amp;gbraid=0AAAAAD_WZgCbjGmtfYw9DT8ZVkK8FWInV&amp;gclid=Cj0KCQjw8c3VBhCsARIsAA_xJ907BKkrql4wGGdzhFyBHl3fEwXMjYX35YW5ALFVSGibsPhOtd65l6IaAhhlEALw_wcB"><strong>Learn more about how SAS Viya unifies data, analytics and governance in one platform, so teams can deliver transparent, trustworthy insights at scale.</strong></a></h3>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/09/23/beyond-the-dashboard-how-sas-viya-copilot-lets-curiosity-lead-the-analysis/">Beyond the dashboard: how SAS Viya Copilot lets curiosity lead the analysis</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/09/23/beyond-the-dashboard-how-sas-viya-copilot-lets-curiosity-lead-the-analysis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2024/07/1203893847-150x150.jpg" />
	</item>
		<item>
		<title>The Model Zoo: LLMs, SLMs, and VLMs, Oh My!</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/09/22/the-model-zoo/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/09/22/the-model-zoo/#respond</comments>
		
		<dc:creator><![CDATA[William Nadolski]]></dc:creator>
		<pubDate>Tue, 22 Sep 2026 14:42:30 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Applied AI Modeling]]></category>
		<category><![CDATA[data science]]></category>
		<category><![CDATA[LLMs]]></category>
		<category><![CDATA[SAS Model]]></category>
		<category><![CDATA[SAS Models]]></category>
		<category><![CDATA[SLMs]]></category>
		<category><![CDATA[VLMs]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=22383</guid>

					<description><![CDATA[<p>This post familiarizes a practitioner with LLMs, SLMs, and VLMs as well as serving as a field guide for navigating this rapidly evolving terrain.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/09/22/the-model-zoo/">The Model Zoo: LLMs, SLMs, and VLMs, Oh My!</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Part 1 in the Demystifying Recent AI Advances Series</h2>
<p>In an earlier series on <a href="https://blogs.sas.com/content/subconsciousmusings/2025/03/21/multimodal-transformers-ai-foundation-models-part-1/">multimodal transformers</a>, I introduced zero-shot transformer models and highlighted two standout examples: GLiNER for named entity recognition and SAM for image segmentation. A <a href="https://blogs.sas.com/content/subconsciousmusings/2025/12/17/the-rise-of-small-language-models-for-information-extraction/">follow-up post</a> made the case for Small Language Models as a practical middle ground between traditional NLP and full-scale LLMs and ended with a prediction: the future of enterprise AI would be built on top of smaller, locally deployed models. That prediction seems to be coming to fruition faster than I expected.</p>
<p>The goal of this post, and of the four that follow it, is to cut through the noise. Rather than one sprawling field guide, I have broken the material into a series of shorter, focused installments meant to familiarize a practitioner with emerging technologies and techniques: the model zoo (this post), the autonomy spectrum and the plumbing that supports it, the retrieval architectures used to ground models in enterprise data, and the shifting economics of inference. And lastly, to take a look at how SAS is putting all of it into practice. Taken together, they are meant to serve as a field guide for analytics practitioners navigating this rapidly evolving terrain.</p>
<p>In just a few months, the AI landscape has undergone what can only be described as a technological and terminological explosion. New standards, new architectural patterns, new product categories, and an avalanche of acronyms have emerged at a pace that makes even seasoned practitioners feel like they need a glossary just to follow the conversation. As Andrej Karpathy quipped in 2023, "the hottest new programming language is English." Three years later, he was only half right. English is still part of the equation, but the real engineering has moved far beyond crafting the perfect prompt.</p>
<h2>Different Types of Models</h2>
<aside class="modern-quote pull alignright">The key takeaway is that these are not competing alternatives. They are complementary tools designed for different jobs.</aside>
<p>We begin where most confusion starts: with the models themselves. One of the first sources of confusion in the current AI landscape is the sheer variety of model types. You will hear people throw around terms like LLM, SLM, VLM, reasoning model, and diffusion model almost interchangeably, but they refer to meaningfully different tools with distinct strengths. See Table 1 for an overall summary.</p>
<p><strong>Large Language Models (LLMs)</strong> are the headline-grabbers. These are text-centric models with parameter counts ranging from tens of billions to trillions. GPT-5, Claude Opus, and Gemini Pro all fall into this category. They excel at general-purpose reasoning, open-ended generation, and complex multi-step tasks. They are also expensive to run, typically costing between $2 and $30 per million tokens, and they generally require significant compute infrastructure. Think of LLMs as the senior architects of the AI world: brilliant generalists who can tackle almost anything, but whose time is expensive and best reserved for tasks that genuinely require their breadth.</p>
<p><strong>Small Language Models (SLMs)</strong> range from a few million to roughly 10 billion parameters. Key examples include Microsoft's Phi-4 Mini (3.8B parameters), Meta's LLaMA 3.2 (1B and 3B variants), NVIDIA's Nemotron Nano, and the GLiNER family I discussed in the previous series. SLM inference costs are 5 to 20 times lower than LLMs. A June 2025 NVIDIA position paper, "<a href="https://research.nvidia.com/labs/lpr/slm-agents/">Small Language Models are the Future of Agentic A</a>I," argues that most agentic work (parsing commands, calling tools, producing structured output, summarizing, routing) is repetitive and narrow, making SLMs the natural fit. They can be fine-tuned to strict output formats, run on local consumer-grade hardware, and deliver real-time latency without heavy parallelization. Think of them as a junior employee or intern who can consistently accomplish a well-defined task.</p>
<p>SLMs also play an increasingly critical role in AI safety and governance. Because they are fast and cheap to run, they are ideal for implementing computationally efficient guardrails within a larger agentic process: scanning inputs for prompt injection or jailbreak attempts, detecting toxic or harmful content in model outputs, and enforcing content policy compliance, all in real time and without the latency or cost penalty of routing every safety check through a full-scale LLM. In an agentic workflow where a single user request might trigger dozens of model calls, having lightweight SLM sentinels standing guard at each step is far more practical than asking the expensive orchestrator to police itself. If LLMs are the architects, SLMs are the skilled tradespeople: fast, efficient, and excellent at executing well-defined tasks, including keeping the rest of the system honest.</p>
<p><strong>Vision Language Models (VLMs)</strong> fuse a vision encoder with a language decoder, enabling the model to process images and text jointly. They span sizes from compact (Qwen2.5-VL at 7B parameters) to frontier scale. The key distinction is multimodal input: whereas LLMs and SLMs can accept only text as input, a VLM can accept both text and images. This enables them to look at scanned PDFs, photographs, charts, or diagrams and understand what they see in context. This makes VLMs invaluable for document understanding, visual question answering, and any task where layout or visual structure of information matters as much as the words themselves.</p>
<p><strong>Reasoning Models</strong> are a more recent designation given to frontier LLMs. Standard LLMs generate responses token-by-token in a single forward pass, essentially "thinking out loud" as they write. Reasoning models, by contrast, are trained to perform an explicit chain of thought before producing a final answer. They allocate additional compute at inference time, working through a problem step by step internally before committing to a response.</p>
<p>It’s akin to a model performing “Type II thinking” from Daniel Kahneman’s book, “Thinking Fast and Slow”. Most frontier LLM models now include a thinking parameter that can be toggled to influence the amount of effort (and tokens) that should be spent in “thinking” mode. The trade-off is straightforward: reasoning models are slower and more expensive per query (that extra thinking consumes tokens), but they dramatically outperform standard models on tasks requiring multi-step logic, mathematical proof, code debugging, and complex analytical reasoning. For straightforward generation tasks like summarization or translation, a standard LLM is faster and cheaper. For complex tasks where getting the answer right matters more than getting it fast, reasoning models are increasingly the tool of choice.</p>
<p><strong>Diffusion Models</strong> operate on an entirely different principle from the language models above. Rather than predicting the next token in a sequence, diffusion models learn to generate data by gradually reversing a noise-addition process. During training, the model learns how to take pure noise and iteratively refine it into coherent output. This approach has proven spectacularly effective for image generation (Stable Diffusion, DALL-E 3, Midjourney), video generation (Sora, Runway), audio synthesis, and even molecular design.</p>
<p>More recently, diffusion-based architectures have begun appearing in code generation and structured data synthesis, blurring the line between generative media and traditional AI tasks. For enterprise applications, diffusion models are most relevant in scenarios involving synthetic data generation, visual content creation, and augmenting training data sets where real-world data is scarce or sensitive.</p>
<p>&nbsp;</p>
<table width="576">
<tbody>
<tr>
<td width="90"></td>
<td width="102"><strong>LLM (Reasoning)</strong></td>
<td width="120"><strong>SLM</strong></td>
<td width="120"><strong>VLM</strong></td>
<td width="144"><strong>Diffusion Model</strong></td>
</tr>
<tr>
<td width="90"><strong>Parameters</strong></td>
<td width="102">50B -- 1T+</td>
<td width="120">1M -- 10B</td>
<td width="120">3B -- 90B+</td>
<td width="144">1B -- 10B+</td>
</tr>
<tr>
<td width="90"><strong>Input</strong></td>
<td width="102">Text</td>
<td width="120">Text</td>
<td width="120">Text,<br />
Images,<br />
Audio</td>
<td width="144">Images,<br />
Video,<br />
Text</td>
</tr>
<tr>
<td width="90"><strong>Ideal<br />
Tasks</strong></td>
<td width="102">Complex reasoning, orchestration</td>
<td width="120">Extraction, classification, tool calling</td>
<td width="120">Document understanding, visual question answering (VQA)</td>
<td width="144">Image/video/audio generation, synthetic data creation</td>
</tr>
<tr>
<td width="90"><strong>Hardware</strong></td>
<td width="102">Enterprise GPU Clusters or Cloud API</td>
<td width="120">CPU-capable, GPU optional</td>
<td width="120">Consumer<br />
Grade GPU</td>
<td width="144">Consumer<br />
Grade GPU</td>
</tr>
<tr>
<td width="90"><strong>Examples</strong></td>
<td width="102">GPT-5,<br />
Claude Opus, Gemini Pro</td>
<td width="120">Phi-4 Mini, GLiNER, Nemotron Nano</td>
<td width="120">Qwen2.5-VL, Gemma4, PaddleOCR-VL</td>
<td width="144">Stable Diffusion, DALL-E 3, Sora</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p style="text-align: center">Table 1: Different Language Model Variants</p>
<p>The key takeaway is that these are not competing alternatives. They are complementary tools designed for different jobs, and the most effective AI systems use them in thoughtfully designed combinations. An agentic workflow might use a reasoning model to plan a complex task, delegate extraction work to an SLM, hand visual document processing to a VLM, and generate synthetic training data with a diffusion model, all orchestrated by a reasoning LLM acting as the coordinator.</p>
<h2>Generative vs. Discriminative: A Foundational Distinction</h2>
<p>Underneath all the terminology above is a more fundamental split that predates the current wave of generative AI entirely: the difference between discriminative (deterministic) models and generative models. Traditional predictive analytics — credit scoring, fraud detection, churn prediction — is built almost exclusively on discriminative models. Given a set of inputs, a discriminative model learns the boundary or mapping to a specific output: a class label, a probability, a risk score. Feed it the same inputs twice, and it returns the same answer every time. That determinism is precisely why these models have been the backbone of regulated industries for decades: their behavior is reproducible, auditable, and explainable through reason codes, variable importance analysis, or heuristics.</p>
<p>Generative models — including every model type discussed above work differently. Rather than learning a fixed mapping from input to output, they learn the data's underlying distribution and then sample from that distribution to produce new content. Feed a generative model the same inputs and, even with the temperature set to zero, you will get different (though hopefully equally valid) answers. That is a feature, not a bug, when the goal is creative or open-ended output, but it is also exactly why generative AI introduces governance challenges that classical discriminative models never had to contend with: hallucination, output variability, and prompt-level attack surfaces.</p>
<p>Hallucination means a model can state a plausible-sounding falsehood with complete confidence; output variability means the same input can yield inconsistent decisions over time, which complicates audit trails and reproducibility; and prompt-level attack surfaces mean a carefully crafted input can manipulate the model’s behavior in ways a static scoring algorithm was never exposed to. Each is a new class of risk that governance frameworks built for discriminative models were never designed to catch.</p>
<p>Both are AI models, but the distinction has important implications for use case suitability. See Table 2 for a summary of these subtleties.</p>
<table width="666">
<tbody>
<tr>
<td width="120"><strong>Dimension</strong></td>
<td width="276"><strong>Discriminative (Deterministic) Models</strong></td>
<td width="270"><strong>Generative Models</strong></td>
</tr>
<tr>
<td width="120"><strong>What It Learns</strong></td>
<td width="276">Mapping between input and output, P(y | x)</td>
<td width="270">Underlying data distribution, P(x) or P(x, y)</td>
</tr>
<tr>
<td width="120"><strong>Typical Output</strong></td>
<td width="276">A label, class, score, or numeric prediction</td>
<td width="270">New content: text, images, audio, or structured data</td>
</tr>
<tr>
<td width="120"><strong>Determinism</strong></td>
<td width="276">Same input always produces the same output every time</td>
<td width="270">Identical inputs can produce different outputs (due to stochastic sampling and machine rounding)</td>
</tr>
<tr>
<td width="120"><strong>Example Algorithms</strong></td>
<td width="276">Logistic regression, gradient boosting (XGBoost, LightGBM), random forests, SVMs</td>
<td width="270">LLMs, SLMs, VLMs, reasoning models, diffusion models</td>
</tr>
<tr>
<td width="120"><strong>Common Use Cases</strong></td>
<td width="276">Credit risk scoring, fraud detection, churn prediction, underwriting</td>
<td width="270">Content generation, summarization, code generation, document understanding</td>
</tr>
<tr>
<td width="120"><strong>Governance Focus</strong></td>
<td width="276">Reason codes, monotonicity constraints, challenger models, drift monitoring</td>
<td width="270">Hallucination detection, output guardrails, prompt injection defense, human review</td>
</tr>
</tbody>
</table>
<p style="text-align: center">Table 2: Discriminative vs. Generative Models</p>
<p>This is not an either/or choice. The most mature AI programs pair the two. A discriminative model handles the deterministic decision that must be defensible in an audit (approve or decline, flag or clear), while a generative model handles the surrounding tasks that benefit from flexibility (summarizing the case for a reviewer, drafting an explanation letter, or extracting unstructured details that feed the discriminative model’s inputs).<br />
The ideal setup for an enterprise use case might involve using deterministic analytic models upstream.  Then feeding the model artifacts to a downstream generative model. This can assist with understanding the outputs and providing human reviewers with guidance on how to interpret and act on the results.</p>
<p>Ultimately, knowing which category a given model belongs to is the first step in knowing what kind of governance, monitoring, and validation are required to convert a prototype into a vetted, production-ready solution.</p>
<aside class="modern-quote pull alignright">Knowing which kinds of models exist is only half of the picture. Choosing well also means understanding the systems we build around them.</aside>
<h2>Coming Up Next</h2>
<p>Knowing which kinds of models exist is only half of the picture. Ultimately, choosing well also means understanding the systems we build around them. The next post in this series moves up a level of abstraction to look at the autonomy spectrum, the meaningful differences between a chatbot, a copilot, and an agent, and the plumbing that makes agentic behavior possible: Skills, the Model Context Protocol, and the harness that turns a capable model into a reliable system.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/09/22/the-model-zoo/">The Model Zoo: LLMs, SLMs, and VLMs, Oh My!</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/09/22/the-model-zoo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/09/Model_Zoo_approx_1MB-150x150.jpg" />
	</item>
		<item>
		<title>Optimizing clinical and operational resources through AI-driven medical record intelligence</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/08/21/ai-driven-medical-record-intelligence/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/08/21/ai-driven-medical-record-intelligence/#respond</comments>
		
		<dc:creator><![CDATA[Stacey Wang]]></dc:creator>
		<pubDate>Fri, 21 Aug 2026 16:24:04 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Clinical Review]]></category>
		<category><![CDATA[decision intelligence]]></category>
		<category><![CDATA[Document Analysis]]></category>
		<category><![CDATA[generative AI]]></category>
		<category><![CDATA[Healthcare]]></category>
		<category><![CDATA[Operational Efficiency]]></category>
		<category><![CDATA[SAS Intelligent Decisioning]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=22344</guid>

					<description><![CDATA[<p>AI-powered medical record intelligence helps healthcare organizations turn unstructured clinical documents into actionable insights, reducing administrative burden and enabling faster, more consistent review decisions.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/08/21/ai-driven-medical-record-intelligence/">Optimizing clinical and operational resources through AI-driven medical record intelligence</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A clinical reviewer is not a data entry specialist. Yet in many payer organizations today, that’s effectively what they’ve become.</p>
<p>Highly trained nurses and clinicians spend hours navigating fragmented medical records: scrolling through PDFs, interpreting handwritten notes and cross-referencing guidelines; not because the work requires their expertise, but because the information they need isn’t readily accessible. The real challenge isn’t clinical complexity. It’s operational friction.</p>
<p>As workforce shortages continue to strain health care systems, much of the conversation has focused on forecasting demand and optimizing staffing levels. But there is another, often overlooked lever: how efficiently existing clinical resources are actually used.</p>
<p>Before asking how many reviewers are needed, it’s worth asking a simpler question: how much of their time is truly spent reviewing?</p>
<h2>The operational reality behind prior authorization</h2>
<p>In prior authorization and medical necessity review, decisions must be evidence-based, consistent, and auditable. But the path to get there is anything but efficient.</p>
<p>Clinical documentation arrives in fragmented formats, from scanned PDFs, faxes, discharge summaries, and operative notes, each with its own structure, or lack thereof. Reviewers must determine the appropriate policy, locate relevant evidence within the record, and document a defensible rationale.</p>
<p>The work is meticulous, but much of it is not clinical. It is administrative navigation disguised as clinical review.</p>
<p>This creates a bottleneck. Throughput slows, turnaround times increase, and highly specialized clinicians spend the majority of their effort on tasks that do not require their level of training. In a constrained workforce environment, this is not sustainable.</p>
<h2>From documents to intelligence</h2>
<p>Addressing this challenge begins with transforming unstructured medical records into something usable.</p>
<p>Traditional approaches stop at digitization, simply converting images into text. But in healthcare, text alone is not enough. What matters is meaning.</p>
<p>SAS&reg; Document Analysis for Health Record Review extracts clinically relevant concepts directly from medical records, including diagnoses, procedures, medications, lab values, and timelines, and organizes them into structured, analytically ready formats. Each extracted element is linked back to its original source, preserving the traceability required in regulated environments. This creates a foundation where clinical data is no longer buried in documents, but accessible and ready to be used for downstream analytics.</p>
<p>The real shift, however, happens when that intelligence is embedded directly into decision workflows.</p>
<h2>Embedding intelligence into review</h2>
<p>Once clinical data is structured, it can be aligned directly to policy criteria within the review process.</p>
<p>In practice, I’ve leveraged <a href="https://www.sas.com/en_za/software/retrieval-agent-manager.html">SAS&reg; Retrieval Agent Manager</a> to retrieve relevant clinical evidence, map it to discrete policy requirements, and return a structured response such as met, not met, or unknown, along with traceable citations tied to specific pages in the medical record.</p>
<p>Instead of asking reviewers to interpret both the guideline and the medical record simultaneously, the system presents a structured, evidence-backed view, turning what was once a manual search into a guided validation process.</p>
<p>For example, in a knee replacement use case for a patient, rather than manually searching for documentation of prior conservative treatment, the system surfaces relevant evidence, such as physical therapy duration or imaging results directly within the checklist, with links back to the exact page in her medical record where the information was identified.</p>
<p><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist.png" alt="" width="1882" height="936" class="aligncenter size-full wp-image-22356" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist.png 1882w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist-300x149.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist-1024x509.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist-768x382.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist-1536x764.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/clinical-review-checklist-164x82.png 164w" sizes="(max-width: 1882px) 100vw, 1882px" /></a></p>
<p><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-rationale.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-rationale.png" alt="" width="630" height="85" class="aligncenter size-full wp-image-22359" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-rationale.png 630w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-rationale-300x40.png 300w" sizes="(max-width: 630px) 100vw, 630px" /></a></p>
<p>At the core of this approach is guideline-locked AI. Rather than allowing models to generalize across multiple sources, the system anchors every evaluation to a single, deterministic policy, ensuring decisions remain consistent, explainable, and aligned to clinical and regulatory expectations.</p>
<h2>Governance before generation</h2>
<p>Equally important is what happens before any AI-driven reasoning occurs.</p>
<p>The process is orchestrated through a governed decision flow, implemented through <a href="https://www.sas.com/en_au/software/intelligent-decisioning.html">SAS Intelligent Decisioning</a>, where policy mapping, provider validation and routing logic are enforced deterministically with automated business rules before any evaluation takes place.</p>
<p><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/decision-workflow.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/decision-workflow.png" alt="" width="1264" height="831" class="aligncenter size-full wp-image-22362" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/decision-workflow.png 1264w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/decision-workflow-300x197.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/decision-workflow-1024x673.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/decision-workflow-768x505.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/decision-workflow-214x140.png 214w" sizes="(max-width: 1264px) 100vw, 1264px" /></a></p>
<p>This ensures the correct policy is selected, providers are validated, and exceptions are routed appropriately. Only then is structured clinical data passed into the AI-driven evaluation layer.</p>
<p>The result is not open-ended automation, but a bounded system where AI operates within clearly defined clinical and regulatory constraints.</p>
<h2>Shifting how clinical time is spent</h2>
<p>The impact of this shift is not just technical, it is operational.</p>
<p>For the reviewer, the experience changes entirely. Instead of navigating fragmented documentation, they enter through a centralized interface where cases are triaged and contextualized within <a href="https://www.sas.com/en_us/software/visual-analytics.html">SAS&reg; Visual Analytics</a>.</p>
<p><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard.png" alt="" width="1908" height="954" class="aligncenter size-full wp-image-22365" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard.png 1908w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard-300x150.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard-1024x512.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard-768x384.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard-1536x768.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/review-dashboard-164x82.png 164w" sizes="(max-width: 1908px) 100vw, 1908px" /></a></p>
<p>Drilling into a case reveals a structured checklist of clinical criteria, supporting evidence, and direct links back to the original medical record. Reviewers can jump directly to the exact page where evidence was identified, eliminating manual search. If there are additional needs to further triage the data and case, the reviewer can directly ask questions based on the patient’s specific medical records and policy guidelines.</p>
<p><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review.png"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review.png" alt="" width="1898" height="929" class="aligncenter size-full wp-image-22368" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review.png 1898w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review-300x147.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review-1024x501.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review-768x376.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review-1536x752.png 1536w" sizes="(max-width: 1898px) 100vw, 1898px" /></a></p>
<p>What was once a time-consuming process becomes a focused review centered on validation and decision-making.</p>
<h2>Building trust through transparency</h2>
<p>In healthcare, automation without transparency is not an option.</p>
<p>Black-box outputs are difficult to trust and even harder to defend. By contrast, an evidence-based framework ensures that every decision can be traced back to both the policy and the underlying medical record.</p>
<p>Reviewers are not asked to trust the system. They are enabled to verify it instantly.</p>
<p>This is where automation and auditability converge.</p>
<h2>Extending beyond prior authorization</h2>
<p>While prior authorization is a natural starting point, the implications extend further.</p>
<p>The same approach can be applied to pre-payment claims review, post-service medical necessity validation, and broader payment integrity workflows. Anywhere clinical decisions depend on unstructured documentation the opportunity exists to reduce friction and improve consistency.</p>
<h2>A more practical path to resource optimization</h2>
<p>By transforming unstructured data into structured intelligence and embedding it into governed decision workflows, organizations can unlock capacity within existing teams. Not by asking more of clinicians, but by removing the barriers that slow them down.</p>
<p>In that sense, AI-driven medical record intelligence is not just a technology investment. It is a practical way to extend the impact of a limited workforce while improving the experience of the people at the center of it.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/06/19/scaling-submission-automation-with-sas-clinical-acceleration-on-viya/">Scaling submission automation with SAS Clinical Acceleration on Viya</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/07/17/a-route-to-uncover-alzheimers-two-years-earlier/">Detecting Alzheimer's earlier with AI</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/07/24/how-to-build-predictive-health-care-ai-from-data-to-decision/">How to build predictive health care AI from data to decision</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2024/06/28/a-digital-assistant-for-medical-record-review/">A Digital Assistant for Medical Record Review</a></li>
</ul>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/08/21/ai-driven-medical-record-intelligence/">Optimizing clinical and operational resources through AI-driven medical record intelligence</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/08/21/ai-driven-medical-record-intelligence/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/ai-case-review-150x150.png" />
	</item>
		<item>
		<title>Building a governed banking workflow with SAS® Viya® MCP Server and Claude Cowork</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/08/06/building-a-governed-banking-workflow-with-sas-viya-mcp-server-and-claude-cowork/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/08/06/building-a-governed-banking-workflow-with-sas-viya-mcp-server-and-claude-cowork/#respond</comments>
		
		<dc:creator><![CDATA[Adam Neiberg]]></dc:creator>
		<pubDate>Thu, 06 Aug 2026 19:38:23 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agentic AI]]></category>
		<category><![CDATA[AI governance]]></category>
		<category><![CDATA[Banking Analytics]]></category>
		<category><![CDATA[Claude Cowork]]></category>
		<category><![CDATA[decisioning]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=22317</guid>

					<description><![CDATA[<p>Learn how the SAS Viya MCP Server enables AI assistants like Claude Cowork to orchestrate governed, auditable banking analytics workflows while keeping model execution, governance and oversight within SAS Viya.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/08/06/building-a-governed-banking-workflow-with-sas-viya-mcp-server-and-claude-cowork/">Building a governed banking workflow with SAS® Viya® MCP Server and Claude Cowork</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Many discussions about Model Context Protocol (MCP) focus on an AI assistant calling an API and returning a result. Banking requires more than pass-through connectivity: <a href="https://www.sas.com/en_us/software/viya/ai-governance.html">governance</a>, transparency, auditability, trust and human oversight must be present throughout the analytical lifecycle.</p>
<p>The <a href="https://www.sas.com/en_us/software/viya/mcp-server.html">SAS Viya MCP Server</a> addresses that challenge by exposing SAS data, analytics, models and <a href="https://www.sas.com/en_us/software/intelligent-decisioning.html">decisioning capabilities</a> as standardized MCP tools that AI assistants such as Claude Cowork and other MCP-compatible clients can securely consume. Rather than executing the analytical work itself, the AI assistant becomes an orchestration interface, while <a href="https://www.sas.com/en_us/software/viya.html">SAS Viya</a> remains the trusted execution layer behind the workflow.</p>
<p>This post highlights a credit evaluation use case and the architectural components behind it. The centerpiece is a 10-minute demo of SAS Viya MCP Server and Claude Cowork. Watch it now, or keep reading for a closer look at the architecture behind it.</p>
<p><center><br />
<iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/DqTXug8YJy4?si=IhWHgwZ9uYVzGOrt" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe><br />
</center></p>
<h1>Beyond tool calling: MCP for enterprise analytics</h1>
<p>Large language models (LLMs) excel at understanding language and reasoning over information, but they have no inherent awareness of enterprise data, analytical assets or business processes. MCP provides a standardized way for AI assistants to discover and invoke enterprise capabilities.</p>
<p>The SAS Viya MCP Server extends that concept by exposing trusted SAS assets as governed tools. Available as an open-source project on GitHub, the SAS Viya MCP Server currently includes more than 40 capabilities spanning data governance, data access, AutoML, <a href="https://sasoffice365-my.sharepoint.com/personal/elaine_hamill_sas_com/Documents/2026_GCC_Banking/2026_blogs/Adam%20blogs/AI%20is%20not%20just%20for%20the%20big%20banks%20v2%20-%20edited.docx">model management</a>, reporting and interaction with deployed models and decisions.</p>
<p>This makes it possible to orchestrate analytical workflows through natural language while execution, governance and lifecycle management remain within SAS Viya. Existing analytical investments including models, decision flows, governance frameworks and domain expertise can be reused rather than recreated inside LLM applications.</p>
<h1>Banking use case: Credit evaluation</h1>
<p>In the banking demo, Claude Cowork orchestrates creating a credit classification model designed to predict whether an applicant represents a good or bad credit risk. Using a recently released data set from Santander AI Lab to augment a well-known German credit data set, a natural language request coordinates multiple activities across SAS Viya:</p>
<ul>
<li>Data ingestion</li>
<li>Data profiling and governance review</li>
<li>Automated machine learning</li>
<li>Model evaluation and comparison</li>
<li>Model publication</li>
<li>Operational scoring</li>
</ul>
<p>The value is not that an AI assistant can build a model. The value is that the assistant can coordinate a governed analytical workflow while trusted SAS services perform the underlying analytical work. The result is a more efficient path from data to insight without sacrificing transparency or control.</p>
<h1>Governance is built into the architecture</h1>
<p>Many agentic AI demonstrations focus on automation. Regulated industries such as banking require more than automation. They need workflows that can be reviewed, explained and controlled.</p>
<p>In this workflow, analytics and model management remain within SAS Viya. Users can examine profiling results, review model pipelines, validate outputs and understand how results were generated rather than relying on a black-box process.</p>
<p>Human approval also remains part of the model life cycle. Models generated through the workflow are not automatically deployed; stakeholders review and approve assets before deployment. That distinction matters in banking and other regulated environments where oversight, validation and approval are mandatory.</p>
<h1>What technical teams should notice</h1>
<p>Pay attention to several architectural patterns in the demo:</p>
<ul>
<li>SAS capabilities are exposed as standardized MCP tools, rather than through custom integrations.</li>
<li>Analytical execution remains inside SAS Viya while the AI assistant orchestrates activity.</li>
<li>Governance, auditability and access controls remain enforced through existing SAS capabilities.</li>
<li>Enterprise platform details and internal SAS endpoints are not exposed directly to the underlying LLM.</li>
<li>Human approval remains part of the model lifecycle before deployment.</li>
<li>Existing SAS assets, models and analytical workflows can be reused rather than rebuilt for each AI assistant experience.</li>
</ul>
<p>These patterns are applicable well beyond credit modeling and can be extended to fraud detection, marketing optimization, customer intelligence, anti-money laundering and other analytics-driven business processes.</p>
<h1>Take the next step</h1>
<h2>If you're ready to move from concept to hands-on practice, dive into these resources:</h2>
<h3><a href="https://learn.sas.com/course/view.php?id=8207"><strong>1. Free Hands-On Lab: Agentic AI - How To with SAS Viya</strong></a></h3>
<p>Use SAS Agentic AI Accelerator to:</p>
<ul>
<li>Register, publish, and deploy proprietary and open source LLMs.</li>
<li>Build decision workflows that combine LLM judgment with deterministic models.</li>
<li>Deploy AI-driven decisions into Azure AI Assistants.</li>
<li>Monitor model cost, performance, and sentiment.</li>
<li>Gain practical experience with AI governance in a real-world environment.</li>
</ul>
<h3><a href="https://learn.sas.com/totara/program/view.php?id=170"><strong>2. Training: SAS Decisioning Learning Subscription</strong></a></h3>
<p>A new SAS Viya MCP Server chapter will teach you how to:</p>
<ul>
<li>Connect <strong>Claude Cowork</strong> to SAS Viya.</li>
<li>Connect <strong>GitHub Copilot</strong> to a governed SAS Viya environment.</li>
<li>Work within enterprise-grade governance and decisioning frameworks.</li>
</ul>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/08/06/building-a-governed-banking-workflow-with-sas-viya-mcp-server-and-claude-cowork/">Building a governed banking workflow with SAS® Viya® MCP Server and Claude Cowork</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/08/06/building-a-governed-banking-workflow-with-sas-viya-mcp-server-and-claude-cowork/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/08/Agentic-AI-for-Banking-with-SAS-Viya-MCP-Server​-and-Claude-Cowork-150x150.jpg" />
	</item>
		<item>
		<title>How to build predictive health care AI from data to decision</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/07/24/how-to-build-predictive-health-care-ai-from-data-to-decision/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/07/24/how-to-build-predictive-health-care-ai-from-data-to-decision/#respond</comments>
		
		<dc:creator><![CDATA[Chris St. Jeor]]></dc:creator>
		<pubDate>Fri, 24 Jul 2026 17:30:33 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agentic AI]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Clinical Analytics]]></category>
		<category><![CDATA[data management]]></category>
		<category><![CDATA[Healthcare]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[predictive modeling]]></category>
		<category><![CDATA[SAS Health]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=22284</guid>

					<description><![CDATA[<p>Explore how SAS Health and SAS Viya help healthcare organizations transform clinical and operational data into predictive, AI-driven decisioning workflows that improve patient outcomes through risk identification, model deployment, and governed agentic AI.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/24/how-to-build-predictive-health-care-ai-from-data-to-decision/">How to build predictive health care AI from data to decision</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A hospital discharge summary tells you what happened. A predictive model tells you what is about to happen. That distinction is the difference between reactive care and proactive intervention.</p>
<p>Health care organizations sit on enormous volumes of clinical, claims, and operational data. The challenge has never been collecting it. The challenge is turning it into something a care manager can act on before a patient's condition deteriorates, before a preventable ER visit occurs, or before a high-risk pregnancy goes unmonitored.</p>
<p>That's the problem SAS Health was built to solve, not by replacing clinical judgment, but by giving clinicians and analysts the signals they need at the moments they need them.</p>
<h1>Why predictive modeling matters in health care right now</h1>
<p>Value-based care models are pushing payers and providers to do more than report on what already happened. CMS quality measures, HEDIS scores, and state Medicaid program requirements all demand that organizations identify risk early and intervene before costly outcomes materialize.</p>
<p>But early identification at scale requires more than dashboards and descriptive statistics. It requires models that learn from historical patterns, including demographic, clinical, behavioral, and socioeconomic factors, to generate individual-level risk scores that drive targeted outreach.</p>
<p>SAS Health, built on the SAS Viya platform, provides the data foundation for this work, including an industry standard health data model to simplify health data management and accelerate analytic discovery to make decisions confidently.</p>
<p>On top of that foundation, SAS Viya delivers a full suite of <a href="https://www.sas.com/en_us/industry/health-care/viya-for-health-care.html">machine learning and AI</a> tools accessible to both coders and non-coders alike.</p>
<h1>The technical foundation: from data ingestion to agentic AI</h1>
<p>Let's walk through the end-to-end workflow that makes predictive modeling on SAS Health and SAS Viya practical, not theoretical.</p>
<h2>1. Data integration and preparation (SAS Health)</h2>
<p>SAS Health provides out-of-the-box (OOB) industry standard data models that help organizations unify clinical, claims, eligibility, and enrollment data in a single, governed data and AI environment. This gives teams a strong foundation for analytics without requiring them to build every data structure from scratch.</p>
<p>Just as important, the platform supports the ongoing preparation of new analytic-ready data assets beyond the initial ingestion layer. Using open source programming, SAS and SQL-based transformation, or no-code/low-code data preparation tools, teams can create additional curated datasets for ad hoc analytics, investigation, reporting, and model development. This gives organizations flexibility to extend the core data models with business-specific data products while preserving governance, repeatability, and alignment across analytic workflows.</p>
<p>And not every user preparing cohorts or exploring data has to be a data scientist. SAS Viya Copilot for Clinical Data Discovery uses AI-powered natural language search to let clinicians and researchers query health care data conversationally. Ask a question in plain language, get a report back, no code required. This accelerates the feedback loop between insight generation and clinical decision-making.</p>
<h2>2. Predictive modeling: build your own or deploy industry accelerators (SAS Viya)</h2>
<p>With the data loaded and available to analytic teams, SAS Viya gives you two paths to predictive modeling. You can either build custom models from scratch that are tailored to your population or deploy industry accelerators that are purpose-built for health care. Most organizations will use both.</p>
<h3>Build your own with Model Studio</h3>
<p>The SAS Viya platform provides a drag-and-drop interface for constructing full <a href="https://www.sas.com/en_is/software/model-studio.html">model pipelines</a>, from preprocessing through supervised learning to post-processing, without requiring a single line of code.</p>
<p>A typical pipeline might look like this:</p>
<ul>
<li><strong>Preprocessing: </strong>Imputation of missing values, transformation of skewed variables (e.g., BMI, weight gain), variable selection, and feature engineering.</li>
<li><strong>Supervised learning: </strong>Choose from gradient boosting, random forests, neural networks, logistic regression, support vector machines, and more.</li>
<li><strong>Post-processing: </strong>Ensemble methods that take a weighted vote or weighted average across multiple models for a final, more robust prediction.</li>
</ul>
<p>You can build multiple pipelines side by side. For example, one pipeline might focus on tree-based models with variable transformations, while another uses regression models that require imputation and stepwise variable selection. SAS Viya lets you compare them head-to-head using metrics like the K-S statistic, ROC curves, or your own custom assessment criteria.</p>
<p>And if you are a coder? You can bring your existing Python or R models directly into the workflow and score them against SAS-native models in the same project.</p>
<h3>Deploy industry accelerators</h3>
<p>For common health care use cases, SAS also offers industry accelerators that can be used by customers to train models more efficiently:</p>
<ul>
<li><strong>Medication Adherence Risk: </strong><a href="https://blogs.sas.com/content/subconsciousmusings/2024/11/12/enhancing-patient-outcomes-sas-ai-approach-to-medication-adherence/">Medication adherence</a> has long been a measure of patient health outcomes and a key factor in regulatory quality assessments — including quality ratings for Medicare Advantage, Medicaid, and Exchange plans. SAS Medication Adherence Risk enables managed care organizations to identify where resources are needed for timely and targeted intervention, resulting in enhanced patient engagement, better health outcomes, improved quality metrics, lower health care costs, and a significant ROI.</li>
<li><strong>Document Analysis for Health Records: </strong>Automates the ingestion and analysis of unstructured health records to extract clinically relevant information quickly and accurately. Advanced OCR converts scanned documents and digitized medical records into structured, tabular data with optional annotated PDFs for review. An intuitive workflow standardizes the identification of key medical findings, improving consistency across reviews and reducing manual effort and variability.</li>
<li><strong>AI-Driven Entity Resolution: </strong>Streamlines decision-making and boosts operational efficiency by accurately identifying and consolidating entities across various datasets — including in health care, insurance, and public sector. This model pipeline offers robust data preparation, flexible fuzzy matching, and scoring to eliminate duplicates and inconsistencies, ensuring a single, accurate view of each entity.</li>
</ul>
<h2>3. Bias detection and explainability (SAS Viya)</h2>
<p>Health care data carries inherent biases. Historical disparities in access, diagnosis patterns, and social factors are all embedded in the data your models learn from. SAS Viya helps you gain understandable and defensible insights with AI that deliver plain-language explanations of data, models and predictions, built-in bias monitoring and full auditability. The <a href="https://video.sas.com/detail/video/6376986068112/fairness-and-bias-monitoring-%7C-sas-viya-trustworthy-ai-features">built-in bias detection</a> capabilities let you flag variables for monitoring throughout the modeling lifecycle. This helps your models be accurate as well as equitable across all patient populations. SAS Viya helps you gain understandable and defensible insights with AI that deliver plain-language explanations of data, models and predictions, built-in bias monitoring and full auditability.</p>
<h2>4. Model deployment and monitoring (SAS Viya)</h2>
<p>Once you've identified your champion model, SAS Viya makes the path to production straightforward. You can <a href="https://blogs.sas.com/content/subconsciousmusings/2024/08/08/sas-model-cards-now-available/">publish and register</a> a model at the push of a button, then Viya will help you monitor its performance over time and help you retrain it when you detect drift or bias. This operationalization step, which traditionally takes weeks of custom engineering, is built directly into the platform.</p>
<h2>5. From predictive models to agentic AI</h2>
<p>Predictive models generate risk scores, but a risk score sitting in a database doesn’t improve a patient’s outcome. The real impact comes from operationalizing those scores into automated, <a href="https://www.sas.com/en_us/software/intelligent-decisioning.html">real-time decisions at scale</a>.</p>
<p>SAS Viya provides the platform to make that possible. It enables organizations to combine predictive models, business rules, and large language model (LLM) capabilities into governed analytic and decisioning workflows that can execute at enterprise scale. Instead of handing a care manager a static list of high-risk patients, organizations can build logic that dynamically determines the right intervention, for the right patient, through the right channel, triggered automatically when a risk threshold is crossed.</p>
<p>With SAS Viya’s <a href="https://www.sas.com/en_us/solutions/ai/agentic-ai.html">agentic AI</a> capabilities, organizations can go even further by designing purpose-built AI agents that do more than score and flag. These agents can analyze context, recommend or initiate next steps, and support action across operational workflows by combining the rigor of deterministic analytics with the flexibility of large language models.</p>
<p>For health care, this means moving beyond dashboards and risk lists toward more autonomous, intelligent workflows, where the platform can help identify a high-risk patient, evaluate the appropriate intervention based on clinical rules and predictive scores, and support outreach through the right channel, all with built-in governance, explainability, and human oversight where needed.</p>
<p>SAS Viya’s approach to agentic AI is built on <a href="https://www.sas.com/en_us/news/press-releases/2025/may/innovate-ai-agents-intelligent-decisioning.html">three core principles</a>:</p>
<ul>
<li><strong>Decisioning:</strong> Combine predictive models, business rules, and LLM reasoning into hybrid workflows that balance precision with adaptability.</li>
<li><strong>Human/AI balance:</strong> Configure the right level of autonomy for each task, from fully automated low-risk decisions to human-reviewed interventions where appropriate.</li>
<li><strong>Governance:</strong> Ensure outputs are explainable, auditable, and compliant, because in health care, trust is not optional.</li>
</ul>
<p>This is what closes the loop. Data is integrated, prepared, modeled, deployed, and operationalized within SAS Viya allowing organizations to move from insight to action at scale, in real time, with the governance health care demands.</p>
<h1>The bottom line</h1>
<p>Predictive modeling and AI in health care isn't about replacing the expertise of clinicians and care managers. It's about equipping them with earlier, more precise signals so they can focus their attention where it matters most.</p>
<p>SAS Viya brings together the full analytics lifecycle on a single platform, from data ingestion and standardization, to model building and deployment, to real-time decisioning and agentic AI workflows that act at the point of care. It's a production-grade data and AI platform with the governance, scalability, and interoperability that health care demands.</p>
<p>If you're looking to move from retrospective reporting to prospective, model-driven care management, the platform is here. The data is waiting.</p>
<h2>Learn more</h2>
<ul>
<li><a href="https://www.sas.com/en_us/webinars/how-is-ai-transforming-clinical-data-programming.html">How is AI Transforming Clinical Data Programming?</a></li>
<li><a href="https://www.sas.com/en_us/webinars/ate-r-and-sas-working-seamlessly-together-unlocking-proc-r-in-viya-for-life-sciences.html">R and SAS Working Seamlessly Together: Unlocking PROC R in Viya for Life Sciences</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2024/11/12/enhancing-patient-outcomes-sas-ai-approach-to-medication-adherence/" target="_blank" rel="noopener noreferrer">Enhancing Patient Outcomes: SAS AI Approach to Medication Adherence</a></li>
<li><a href="https://communities.sas.com/t5/SAS-Communities-Library/Introducing-the-SAS-Agentic-AI-Accelerator-Build-AI-Agents/ta-p/977176" target="_blank" rel="noopener noreferrer">Introducing the SAS Agentic AI Accelerator: Build AI Agents Faster</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2024/08/08/sas-model-cards-now-available/" target="_blank" rel="noopener noreferrer">SAS Model Cards: Increasing Transparency and Trust in AI</a></li>
</ul>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/24/how-to-build-predictive-health-care-ai-from-data-to-decision/">How to build predictive health care AI from data to decision</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/07/24/how-to-build-predictive-health-care-ai-from-data-to-decision/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/How-to-build-predictive-health-care-AI-from-data-to-decision-150x150.jpeg" />
	</item>
		<item>
		<title>Predictive maintenance for wind farm management with SAS: From real-time sensor data to maintenance alerts</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/07/23/predictive-maintenance-for-wind-farm-management-with-sas/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/07/23/predictive-maintenance-for-wind-farm-management-with-sas/#respond</comments>
		
		<dc:creator><![CDATA[Jagdishwar Mankala]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 16:25:24 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Applied AI Modeling]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[predictive modeling]]></category>
		<category><![CDATA[SAS Event Stream Processing]]></category>
		<category><![CDATA[SAS Model]]></category>
		<category><![CDATA[SAS Models]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=22139</guid>

					<description><![CDATA[<p>This post introduces a conceptual, plug-and-play predictive maintenance framework for wind farm management.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/23/predictive-maintenance-for-wind-farm-management-with-sas/">Predictive maintenance for wind farm management with SAS: From real-time sensor data to maintenance alerts</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Authors: <a href="https://blogs.sas.com/content/subconsciousmusings/author/jagdishwarmankala/">Jagdishwar Mankala</a> and <a href="https://blogs.sas.com/content/author/baharbiller/">Bahar Biller</a></strong></p>
<p>In this post, we introduce a conceptual, plug-and-play predictive maintenance framework for wind farm management that builds on a technical paper published in <a href="https://communities.sas.com/t5/Research-and-Science-from-SAS/Predictive-Maintenance-for-Wind-Farm-Management-Using-Real-Time/ta-p/986623">SAS Communities</a>. For utility companies, reducing unplanned downtime remains a key operational challenge, making predictive maintenance a critical capability. By using SAS software, real-time monitoring, machine learning, and <a href="https://support.sas.com/en/software/event-stream-processing-support.html">SAS Event Stream Processing</a>, the framework shows how sensor measurements can be analyzed in real time to monitor turbine performance, generate explainable maintenance alerts, help reduce downtime, and improve operational efficiency. Although this discussion focuses on wind farms, organizations can extend the same framework to real-time monitoring and predictive maintenance for other industrial assets. To place the wind-farm application in context, we first consider the current landscape and the key challenges faced by wind farm operators.</p>
<h2>Current landscape and key challenges in the wind industry</h2>
<p>Wind energy has rapidly become the largest source of renewable electricity in the United States. According to the <a href="https://www.energy.gov/eere/wind/20-wind-energy-2030-increasing-wind-energys-contribution-us-electricity-supply">US Department of Energy report</a>, over 10% of the electricity generated by utilities today comes from wind power. Looking ahead, this share will grow significantly, reaching 20% by 2030 and potentially 35% by 2050. The U.S. wind turbine data base reports nearly 76,000 turbines installed across the country. This reflects the scale and momentum of wind energy adoption.</p>
<figure id="attachment_22166" aria-describedby="caption-attachment-22166" style="width: 800px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-1.png"><img loading="lazy" decoding="async" class="size-full wp-image-22166" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-1.png" alt="" width="800" height="399" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-1.png 800w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-1-300x150.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-1-768x383.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-1-164x82.png 164w" sizes="(max-width: 800px) 100vw, 800px" /></a><figcaption id="caption-attachment-22166" class="wp-caption-text">Figure 1: The U.S. wind production data base</figcaption></figure>
<p>Despite such a promising outlook, wind farm operators continue to face several critical operational challenges that impact both efficiency and reliability:</p>
<ul>
<li><strong>Unplanned Downtime</strong>: Minimizing unexpected turbine failures remains the most pressing issue in wind farm management. Failure to prevent unplanned downtime can severely affect energy output and increase maintenance costs.</li>
<li><strong>Navigating Real-Time Data</strong>: Wind turbines generate vast volumes of data in real time. Analyzing these data sets and quickly transforming the results into actionable insights remain major challenges.</li>
<li><strong>Monitoring Performance at Scale</strong>: Many utility companies operate hundreds of turbines across vast geographic areas. Identifying underperforming turbines and diagnosing issues quickly are essential to minimizing energy losses and maintaining operational efficiency.</li>
<li><strong>Advanced Predictive Modeling Needs</strong>: Developing accurate predictive models to anticipate failures or inefficiencies requires advanced analytics techniques. These models must not only detect anomalies but also provide actionable insights into specific turbine sub-components that might be at risk.</li>
</ul>
<p>These challenges highlight the need for a more proactive, data-driven approach to wind farm maintenance. To address them, this post presents a conceptual framework for wind farm analytics and predictive maintenance by using SAS software. The framework shows how advanced analytics, SAS Event Stream Processing, and machine learning could help operators. This includes:</p>
<ul>
<li>Identifying potential issues earlier</li>
<li>Guiding field technicians toward relevant turbines and their components</li>
<li>Focusing maintenance efforts where they are needed most.</li>
</ul>
<h2>What makes the SAS predictive maintenance framework useful for wind turbines</h2>
<p>The SAS predictive maintenance conceptual framework is designed to show how predictive model development by using historical turbine data can be combined with real-time monitoring capabilities to support turbine performance, reliability, and operational efficiency.</p>
<ul>
<li><strong>Historical Wind Farm Data Analysis</strong>: Historical wind farm data is analyzed through a robust offline training process to develop predictive models for anomaly detection and power prediction. By leveraging advanced analytics and ML, the framework illustrates three things:
<ol>
<li>How hidden patterns in historical data can be uncovered</li>
<li>How model performance can be assessed</li>
<li>How insights can be generated through visualizations. These insights form the foundation for accurate and reliable real-time monitoring.</li>
</ol>
</li>
<li><strong>Real-Time Monitoring with Power Curve Insights</strong>: Building on the trained models, the framework demonstrates how real-time monitoring can be achieved by continuously streaming data from a wide array of turbine sensors and introducing real-time power curve monitoring. This capability enables operators to continuously track turbine performance and detect deviations from expected output. This helps them identify units that underperform or behave abnormally.</li>
<li><strong>Accurate Power Prediction and Performance Explanation</strong>: The framework illustrates how predictive models can be used to predict wind power generation. It also helps explain performance variations. By highlighting the most influential factors affecting turbine output, it enables operators to understand the underlying drivers behind observed trends. In turn, they can now make informed operational decisions.</li>
<li><strong>Proactive Maintenance Alerts</strong>: The framework describes how maintenance alerts with contextual explanations and email notifications can guide field technicians toward issues that might require attention. This proactive approach could help reduce downtime and extend equipment life.</li>
<li><strong>Lightweight and Scalable Deployment</strong>: Within the proposed framework,<br />
<a href="https://support.sas.com/en/software/sas-viya-platform.html" target="_blank" rel="noopener noreferrer">SAS Viya</a> or <a href="https://support.sas.com/en/software/sas-viya-workbench-support.html" target="_blank" rel="noopener noreferrer">SAS Viya Workbench</a> can support model training. An ESP-based workflow can integrate predictive capabilities into wind farm operations through 24/7 anomaly detection, power prediction, and alert generation. In practice, such a workflow could help wind farms minimize unplanned downtime and maintain operational continuity.</li>
</ul>
<p>Having outlined the framework's key capabilities, we will now provide a high-level overview of how the proposed workflow implements them.</p>
<h2>Framework overview</h2>
<p>At a high level, the proposed framework operationalizes its predictive maintenance capabilities through two main stages. They are learning from historical data and monitoring turbine performance in real time. Model training and deployment &amp; monitoring are shown in Figure 2.</p>
<figure id="attachment_22151" aria-describedby="caption-attachment-22151" style="width: 702px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-2.png"><img loading="lazy" decoding="async" class="size-large wp-image-22151" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-2-1024x460.png" alt="" width="702" height="315" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-2-1024x460.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-2-300x135.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-2-768x345.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-2-1536x690.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-2-2048x920.png 2048w" sizes="(max-width: 702px) 100vw, 702px" /></a><figcaption id="caption-attachment-22151" class="wp-caption-text">Figure 2: SAS predictive maintenance model components</figcaption></figure>
<p>In the first stage, historical data is used to develop predictive models for anomaly detection, power prediction, and local sensitivity analysis. In the second stage, these models are applied to streaming data to support ongoing monitoring and alert generation. Although model training comes first in the workflow, we discuss real-time monitoring first because it shows how the trained models are ultimately used in practice to generate alerts and support maintenance decisions.</p>
<h2>Real-time monitoring</h2>
<p>Building on the two-stage workflow described in Figure 2, the real-time monitoring phase illustrates how continuous analysis of turbine performance could be performed by using live data streams. In this stage, the trained models and their configuration files are packaged into a containerized deployment by using Docker. The entire pipeline, including the SAS Event Stream Processing workflow, is embedded within the container. In a real-world implementation, such capabilities would help operators identify issues earlier, respond more quickly, and focus maintenance efforts more effectively.</p>
<figure id="attachment_22163" aria-describedby="caption-attachment-22163" style="width: 702px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3.png"><img loading="lazy" decoding="async" class="size-large wp-image-22163" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3-1024x541.png" alt="" width="702" height="371" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3-1024x541.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3-300x158.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3-768x406.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3-1536x811.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3-2048x1082.png 2048w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-3-351x185.png 351w" sizes="(max-width: 702px) 100vw, 702px" /></a><figcaption id="caption-attachment-22163" class="wp-caption-text">Figure 3: Real-time monitoring components</figcaption></figure>
<p>Figure 3 illustrates an overview of the real-time monitoring architecture. At its core, a real-time data pipeline built with SAS SAS Event Stream Processing continuously ingests streaming data from wind turbines and processes it as it arrives. As the data flows through the pipeline, it undergoes preprocessing, model scoring using ASTORE files, and post-processing to generate actionable outputs. Here, ASTORE refers to a binary analytical store that packages a trained model for use by the real-time monitoring workflow in scoring incoming turbine data.</p>
<p>During the proposed real-time monitoring workflow, the framework illustrates several operational capabilities that could support a real-world implementation:</p>
<ul>
<li><strong>Alert Management</strong>: Shows how anomalies and performance deviations could be detected in real time and how alerts could be triggered when potential issues are identified.</li>
<li><strong>Explainability through Local Sensitivity Analysis</strong>: Illustrates how insights into the key factors contributing to each alert could help operators understand the underlying causes of performance issues.</li>
<li><strong>Automated Notifications</strong>: Demonstrates how real-time email alerts could be generated for field technicians to support faster response and targeted maintenance actions.</li>
<li><strong>Real-Time Data Summarization</strong>: Shows how incoming data could be continuously aggregated and summarized to support monitoring dashboards and reporting needs.</li>
</ul>
<p>During real-time monitoring, the framework demonstrates how maintenance alerts can be generated through two primary mechanisms:</p>
<ul>
<li><strong>Anomaly Detection</strong>: By applying a trained anomaly detection algorithm, the framework identifies turbines exhibiting unusual or abnormal behavior based on deviations from learned patterns.</li>
<li><strong>Power Prediction</strong>: ML models are used to predict expected wind power output and detect turbines generating below expected levels. Comparing actual and predicted values further supports a model performance monitoring concept that illustrates how the accuracy of a deployed power prediction model can be tracked over time and how performance degradation can be detected. When a decline is identified, an alert can be generated to recommend retraining the model, ensuring predictive capabilities remain accurate and reliable.</li>
</ul>
<p>To support timely response and effective field operations, the framework demonstrates how the resulting alerts can be delivered through automated email notifications. These notifications are generated based on model outputs and predefined alert rules. They are sent directly to field technicians and operators. Each notification provides a consolidated view of the alert types triggered for a specific turbine on a given day. Also included are the corresponding values that exceed predefined threshold limits, enabling quick and informed decision-making.</p>
<h2>Alert types in real-time monitoring</h2>
<p>By applying anomaly detection and power prediction models to real-time data, the framework demonstrates how automated alerts and notifications can be generated. Figure 3 includes an example email notification on the lower right-hand side. The notification captures anomalous behavior, low power generation, and model performance alerts together. This example summarizes the three alert types supported within the framework:</p>
<ul>
<li><strong>Alert Type 1 – Unusual Turbine Behavior</strong>: This alert is generated when a turbine behaves differently from what is expected while it is operating. This alert is based on an anomaly score that measures how unusual the turbine’s current behavior is, relative to its expected operating pattern (a higher score indicates deviation from normal behavior). In Figure 3, Turbine 2 is flagged on day 8 because its anomaly score exceeded a threshold derived under the assumption that only 1% of observations are anomalous. The anomaly score remained above this threshold for three continuous hours, spanning 18 consecutive 10-minute intervals. The unusual pattern begins about 10 hours and 40 minutes into the notification period, which suggests that the event is more than a brief, one-time spike. This tells operators that Turbine 2 might need attention because its behavior remained unusual for an extended period.</li>
<li><strong>Alert Type 2 – Low Power Generation</strong>: This type of alert is used when a turbine is producing less power than expected while it is running. In this context, low power generation means that the turbine’s actual power output is below the level expected for its operating conditions. In Figure 3, low-power generation is also detected for Turbine 2 on day 8. This is due to its output dropping below the expected level and staying low for three continuous hours, spanning 18 consecutive 10-minute intervals. The lower output begins about 3 hours and 20 minutes into the notification period. This indicates a sustained reduction rather than a short-lived dip. This suggests that Turbine 2 might require investigation because it is not generating as much power as expected.</li>
<li><strong>Alert Type 3 – Low Prediction Performance</strong>: This alert is generated when the predicted power output and the actual power output no longer match closely enough over time. In this context, prediction performance describes how well the model’s expected power output matches what the turbine produces. Lower performance means the model’s predictions are becoming less reliable. In the example, the prediction error rises above the expected limit and remains high for 23 continuous hours, spanning 138 consecutive 10-minute intervals. This points to a persistent mismatch rather than a brief one-time difference. The notification also notes when the power prediction model was last trained. Together, these details suggest that the model might no longer reflect current turbine behavior well and might need to be reviewed or retrained.</li>
</ul>
<h2>Explainability for field teams</h2>
<p>When an alert is triggered, local sensitivity analysis can identify the key factors that contribute to the detected issue. These insights are further summarized into component-level tag groups. They include Environment, Blade, Hub, Rotor, Nacelle, Main Bearing, Gearbox, Generator, Transformer, Hydraulic Unit, and Tower. By aggregating model explanations into these component categories, the framework shows how operators could obtain a clearer view of the relative impact of each turbine subsystem.</p>
<p>Figure 4 illustrates an example of a low-power generation alert. This is where the component-level impacts are derived from a <a href="https://go.documentation.sas.com/doc/en/workbenchcdc/default/vwbcasml/vwbcasml_gradboost_syntax01.htm">PROC GRADBOOST</a> model that estimates expected turbine power and uses <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/default/casml/casml_gradboost_details21.htm">TreeSHAP values</a> to quantify the contribution of each input variable to an individual prediction. In this example, the gearbox is identified as the component contributing most significantly to the alert with a total percentage impact (totalPercentImpact) of 89.112367. This indicates that approximately 89% of the explained contribution to the low-power generation alert is associated with gearbox-related sensor tags.</p>
<p>In practical terms, this does not prove that the gearbox is the root cause of the issue. Rather, it indicates that gearbox-related measurements account for the largest share of the model’s explanation for why Turbine 7 is producing less power than expected. This helps field technicians prioritize gearbox-related measurements or operating conditions when beginning their investigation. Such insights could help field technicians focus their investigation on the most relevant components, thereby improving maintenance efficiency.</p>
<figure id="attachment_22169" aria-describedby="caption-attachment-22169" style="width: 702px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4.png"><img loading="lazy" decoding="async" class="wp-image-22169 size-large" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4-1024x831.png" alt="Predictive maintenance - Figure 4: Explanation for the detected alert" width="702" height="570" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4-1024x831.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4-300x243.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4-768x623.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4-1536x1246.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4-168x137.png 168w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-4.png 1700w" sizes="(max-width: 702px) 100vw, 702px" /></a><figcaption id="caption-attachment-22169" class="wp-caption-text">Figure 4: Explanation for the detected alert</figcaption></figure>
<p>The effectiveness of the monitoring workflow, including its anomaly detection and power prediction capabilities, depends on the ML models developed during the training phase,</p>
<h2>Model training</h2>
<p>In this phase of the predictive maintenance framework, historical wind farm data is analyzed to develop ML models and derive actionable insights. First, we access SAS Viya (cloud or on-premises) or SAS Viya Workbench (cloud). Once access is established, the system makes the SAS wind farm predictive maintenance macro catalog available within the environment. This catalog contains the pre-defined components required for the ML workflow, including data preprocessing, model training, and post-processing steps. Following this, the data sets are uploaded and preprocessed according to the required data template. These data sets typically capture a wide range of information. This would include turbine power generation, environmental conditions such as wind speed and ambient temperature, and sensor readings related to key turbine components like pressure and temperature.</p>
<p>In addition to operational data, the framework incorporates supporting inputs such as alert management rules and turbine specifications. These might include parameters such as blade length, rated power, rated wind speed, air density, and the operating wind speed range of each turbine. Together, these inputs provide important contextual information that enhances the quality and relevance of the analysis. Figure 5 provides an overview of the architecture of the model training components.</p>
<figure id="attachment_22157" aria-describedby="caption-attachment-22157" style="width: 702px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-5.png"><img loading="lazy" decoding="async" class="size-large wp-image-22157" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-5-1024x496.png" alt="" width="702" height="340" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-5-1024x496.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-5-300x145.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-5-768x372.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-5-1536x743.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-5-2048x991.png 2048w" sizes="(max-width: 702px) 100vw, 702px" /></a><figcaption id="caption-attachment-22157" class="wp-caption-text">Figure 5: Model training components</figcaption></figure>
<p>At the end of the training phase, the framework produces a range of outputs that support both historical data analysis and real-time monitoring. These outputs fall into three broad categories.</p>
<h3>Analysis Results</h3>
<p>Several structured output files summarize different aspects of turbine performance and model behavior. They include:</p>
<ul>
<li>anomaly scoring summaries</li>
<li>power prediction and anomaly detection results</li>
<li>model fit metrics</li>
<li>important input variables</li>
<li>turbine-level efficiency measures</li>
<li>power curve summaries</li>
<li>uncertainty estimates</li>
<li>risk profiles of turbine operation across wind speed regions.</li>
</ul>
<p>The framework further captures filtered turbine data, relationships among variables, principal component analysis (PCA) results, and aggregate turbine statistics. Together, these outputs provide a detailed view of how turbines are operating, how well the predictive models are performing, and which variables or operating conditions might be contributing to unusual behavior or lower-than-expected power generation.</p>
<h3>Visualizations</h3>
<p>Charts and graphical outputs generated during the model training phase help interpret ML model behavior and turbine performance through plots such as turbine clustering, efficiency trends, and other analytical charts that explain how different variables contribute to performance. Figure 6 presents the power curve with uncertainty quantification. It provides the Box-and-Whisker plots summarizing power distribution for eight selected turbines in a wind farm. It also shows how the PCA loading plots could be useful for identifying clusters among the many turbines in large wind farms.</p>
<p>The PCA-based output shown in Figure 6 was generated by using <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/default/qcug/qcug_intromvp_toc.htm">PROC MVP</a>, a SAS procedure for multivariate process monitoring. PROC MVP uses PCA, an unsupervised machine learning technique, to summarize correlated process variables into a smaller set of principal components. The resulting loading plot helps reveal how turbines relate to the dominant patterns in the data. Turbines that appear close together exhibit similar multivariate behavior. Those that are farther apart might represent distinct operating patterns or groups that warrant further investigation.</p>
<figure id="attachment_22181" aria-describedby="caption-attachment-22181" style="width: 702px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-6-1.png"><img loading="lazy" decoding="async" class="wp-image-22181 size-large" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-6-1-1024x254.png" alt="Predictive maintenance - Figure 6: Understanding turbine performance and variability" width="702" height="174" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-6-1-1024x254.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-6-1-300x75.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-6-1-768x191.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-6-1-1536x382.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-6-1-2048x509.png 2048w" sizes="(max-width: 702px) 100vw, 702px" /></a><figcaption id="caption-attachment-22181" class="wp-caption-text">Figure 6: Understanding turbine performance and variability</figcaption></figure>
<p>Figure 7, on the other hand, shows scatter plots of true wind speed versus turbine power. The data points are classified as normal (blue) or anomalous (yellow) with color intensity indicating anomaly severity. For this anomaly visualization, we used <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/default/casml/casml_forest_toc.htm">PROC FOREST</a> with the <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/default/casml/casml_forest_syntax01.htm#casml.forest.proc_isolation">isolation forest</a> option. This constructs a random forest for unsupervised anomaly detection rather than target prediction. The procedure generates anomaly scores, with larger values indicating observations that are more unusual relative to the observed data patterns. Figure 7 also provides a corresponding time-series plot. This further illustrates how anomaly scores vary over time and how they can help identify periods of abnormal turbine behavior.</p>
<figure id="attachment_22172" aria-describedby="caption-attachment-22172" style="width: 702px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-7.png"><img loading="lazy" decoding="async" class="wp-image-22172 size-large" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-7-1024x254.png" alt="Predictive maintenance - Figure 7: Power curve monitoring and anomaly detection" width="702" height="174" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-7-1024x254.png 1024w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-7-300x75.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-7-768x191.png 768w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-7-1536x382.png 1536w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/july-mankala-figure-7.png 2000w" sizes="(max-width: 702px) 100vw, 702px" /></a><figcaption id="caption-attachment-22172" class="wp-caption-text">Figure 7: Power curve monitoring and anomaly detection</figcaption></figure>
<h3>Deployment-Oriented Assets</h3>
<p>An ESP-based monitoring workflow can use packaged ASTORE files for trained turbine power prediction, anomaly score generation, and anomaly detection models. The package also contains configuration files that define asset and analytics parameters. During deployment and execution, the SAS Event Stream Processing runtime uses these files to run the application.</p>
<h2>Software requirements</h2>
<p>Implementing the SAS predictive maintenance framework for wind turbines requires several key components:</p>
<ul>
<li><strong>SAS Viya or SAS Viya Workbench</strong>: These platforms provide the analytical environment for working with historical wind farm data and developing ML models that form the foundation for predictive insights and real-time monitoring.</li>
<li><strong>SAS Predictive Maintenance Compiled Macro Catalog</strong>: This includes a collection of pre-built macros that streamline the analytics workflow. It covers data preprocessing, model training, and post-processing steps. It helps standardize and accelerate the development process within the framework.</li>
<li><strong>SAS Predictive Maintenance Event Stream Processing Container</strong>: This component supports real-time data ingestion, model scoring, and alert generation within the monitoring workflow. It would enable continuous monitoring of streaming turbine data, anomaly detection and power prediction by using trained models, and generation of alerts with explainable insights.</li>
</ul>
<h2>Summary</h2>
<p>The SAS predictive maintenance conceptual framework presents a practical approach for connecting historical wind farm analysis with real-time monitoring. By combining ML, SAS SAS Event Stream Processing, and explainable alerting, the framework illustrates how operators could:</p>
<ul>
<li>detect anomalies earlier</li>
<li>better understand asset performance</li>
<li>respond faster and more precisely to operational issues.</li>
</ul>
<p>Although this example focuses on wind turbines, organizations can adopt the same approach to support predictive maintenance and real-time monitoring for other industrial assets.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/23/predictive-maintenance-for-wind-farm-management-with-sas/">Predictive maintenance for wind farm management with SAS: From real-time sensor data to maintenance alerts</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/07/23/predictive-maintenance-for-wind-farm-management-with-sas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/Designer-36-1-150x150.png" />
	</item>
		<item>
		<title>Detecting Alzheimer&#039;s earlier with AI</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/07/17/a-route-to-uncover-alzheimers-two-years-earlier/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/07/17/a-route-to-uncover-alzheimers-two-years-earlier/#respond</comments>
		
		<dc:creator><![CDATA[Kayt Leonard]]></dc:creator>
		<pubDate>Fri, 17 Jul 2026 19:59:42 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agentic AI]]></category>
		<category><![CDATA[Alzheimer's Disease]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Healthcare]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[SAS Hackathon]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=22190</guid>

					<description><![CDATA[<p>Explore how the DementAI team used SAS Viya's integrated AI, machine learning, governance, and decisioning capabilities to help identify Alzheimer's disease up to two years earlier while maintaining the trust and oversight required in healthcare.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/17/a-route-to-uncover-alzheimers-two-years-earlier/">Detecting Alzheimer&#039;s earlier with AI</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3><strong>The question in AI has shifted from "can we build a model?" to "can we trust it, govern it and put it to work?" DementAI answers all three.</strong></h3>
<p><a href="https://communities.sas.com/t5/SAS-Hacker-s-Hub/DementAI-Fight-Dementia-with-AI/ta-p/974489">The DementAI team from Katalyze Data</a>, a UK-based consultancy and long-time SAS Partner, was named the <a href="https://www.sas.com/en_sg/news/press-releases/2026/april/2025-hackathon-grand-champion.html">2025 SAS Hackathon Grand Champion at SAS Innovate</a>. Every year, the <a href="https://www.sas.com/sas/events/hackathon.html">SAS Hackathon</a> turns a month of collaboration into solutions for real problems.</p>
<p>Their system is designed to help flag Alzheimer's disease up to two years sooner than existing approaches not by replacing clinicians, but by surfacing the subtle patterns of decline already sitting in patients' clinical records - and long before a referral to a specialist.</p>
<blockquote class="modern-quote full"><p>We didn't build DementAI just to make predictions. We built it to buy patients’ time. <cite><a href="https://www.linkedin.com/in/tam%C3%A1s-bosznay-0b65089/">Tamás Bosznay, Principal Consultant, Katalyze Data</a></cite></p></blockquote>
<p>That's the goal. What made it achievable in a month? The platform underneath it.</p>
<h2><strong>One platform, from raw data to real-world decision</strong></h2>
<p>What makes DementAI remarkable isn't a single, clever model. Rather, it's that the team took on the entire problem, end to end, without ever leaving SAS Viya.</p>
<p>All in one platform, the team:</p>
<ul>
<li>Built models on EEG data using RNNs and LSTMs in Python.</li>
<li>Modeled tabular health records and applied natural language processing to unstructured clinical notes in Model Studio.</li>
<li>Blended structured records, brain scans and physician notes, using synthetic data where appropriate to protect privacy.</li>
<li>Registered everything in Model Manager as a central repository for comparison and monitoring and deployed it for inference - <em>all in one governed environment</em>.</li>
</ul>
<p>No more stitching together half a dozen disconnected tools, and no data leaving the platform. By building on SAS Viya, the team was able to fully unify data, analytics and governance in a single place.</p>
<h2><strong>Governance isn't the price of speed. It's the source of it.</strong></h2>
<p>In a regulated industry, an AI model is only as valuable as it is trustworthy. The old assumption was that trust slows you down, but DementAI proves the opposite.</p>
<p>What stood out wasn't only the accuracy of the models, but how the team built them: using governed workflows and privacy-preserving techniques. In regulated environments, that foundation is exactly what makes the leap from prototype to real-world pilot possible.</p>
<p>Explainability, audit trails, bias reporting, ongoing monitoring, full data lineage: on SAS Viya, these aren't features you bolt on at the end. They're built in.</p>
<h2><strong>Bring your own language</strong></h2>
<p>The team moved fast for another reason: nobody had to abandon the tools they knew. SAS Viya lets users work in Python, R and SAS within the same governed environment.</p>
<p>A data scientist who lives in Python and a statistician who has spent a career in SAS can build toward the same trusted, deployable result.</p>
<h2><strong>Agentic AI is already in the workflow</strong></h2>
<p>The team wired their models into an agentic AI workflow in SAS Intelligent Decisioning, combining their own machine learning with large language models to transcribe audio, summarize patient history and generate reports. And it’s all kept on the rails by deterministic rules and a human in the loop.</p>
<p>That's not a future vision. It’s a working prototype, built in a month, on a platform designed to carry an idea from messy raw data all the way to governed decision support.</p>
<h2><strong>The stakes are too high for anything less</strong></h2>
<p>By 2050, the number of people living with Alzheimer’s is expected to reach 139 million. Behind each of those figures is a person, and the people who love them, watching for the small signs that something has changed.</p>
<p>DementAI is a remarkable achievement. But the real story is the opportunity it represents for any team, in any regulated industry, sitting on data that could help them see earlier. The platform to do it already exists.</p>
<p>The only variable is how quickly you choose to move.</p>
<p>Behind the scenes, these agentic workflows can be connected to trusted SAS analytics, models and decision services through <a href="https://www.sas.com/en_us/software/viya/mcp-server.html">SAS Viya MCP Server</a>. This enables AI agents to move beyond conversation and securely execute governed business actions using the analytical capabilities <a href="https://github.com/sassoftware/sas-mcp-server">already available</a> in SAS Viya.</p>
<div style="text-align: center; margin: 32px 0;">
<div style="display: inline-block; background-color: #c4defd; border-left: 6px solid #0766D1; padding: 20px; text-align: left; max-width: 700px;">
<h3 style="margin: 0; color: #000000; font-size: 20px; line-height: 1.4; font-weight: bold;"><strong>See what your teams could build. </strong><a href="https://www.sas.com/en_us/solutions/ai/agentic-ai.html"><strong>Learn more about SAS Viya and Agentic AI.</strong></a></h3>
</div>
</div>
<h3>Learn more</h3>
<ul>
<li><a href="https://youtu.be/M6B7rq3Bpyw">Agentic AI for Life Sciences with SAS Viya MCP Server and Claude Cowork</a></li>
<li><a href="https://www.youtube.com/watch?v=ZG2EuXLh1tY">SAS Agentic AI Accelerator | SAS Viya April and May 2026 Release</a></li>
<li><a href="https://communities.sas.com/t5/SAS-Communities-Library/Introducing-the-SAS-Agentic-AI-Accelerator-Build-AI-Agents/ta-p/977176">Introducing the SAS Agentic AI Accelerator: Build AI Agents Seamlessly in SAS Viya</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/05/22/how-agentic-ai-accelerates-sme-credit-decisions-with-sas-viya/">How Agentic AI Accelerates SME Credit Decisions with SAS Viya</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/05/29/agentic-ai-for-workforce-analytics/">Agentic AI for Workforce Analytics: Reducing attrition with personalized, LLM-powered guidance</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/06/09/modernizing-attendance-ticketing/">Modernizing user attendance center ticket handling with trusted agentic AI</a></li>
</ul>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/17/a-route-to-uncover-alzheimers-two-years-earlier/">Detecting Alzheimer&#039;s earlier with AI</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/07/17/a-route-to-uncover-alzheimers-two-years-earlier/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/DementAI-150x150.png" />
	</item>
		<item>
		<title>Ant Colony Optimization metaheuristic in SAS Optimization</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/07/10/ant-colony-optimization-metaheuristic/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/07/10/ant-colony-optimization-metaheuristic/#respond</comments>
		
		<dc:creator><![CDATA[Subbu Pazhani]]></dc:creator>
		<pubDate>Fri, 10 Jul 2026 14:58:21 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Applied AI Modeling]]></category>
		<category><![CDATA[PROC OPTMODEL]]></category>
		<category><![CDATA[SAS Optimization]]></category>
		<category><![CDATA[Simulated Annealing]]></category>
		<category><![CDATA[Travelling Salesman Problem]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=21809</guid>

					<description><![CDATA[<p>Authors: Subbu Pazhani and Rob Pratt In a recent post, we demonstrated how Simulated Annealing (SA) can be used to solve the Traveling Salesman Problem (TSP) by using SAS Optimization. In this post, we extend that discussion by exploring how the Ant Colony Optimization (ACO) metaheuristic can be applied to the same problem [...]</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/10/ant-colony-optimization-metaheuristic/">Ant Colony Optimization metaheuristic in SAS Optimization</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Authors: <a href="https://blogs.sas.com/content/author/subramanianpazhani/">Subbu Pazhani</a> and <a href="https://blogs.sas.com/content/author/robpratt/">Rob Pratt</a></strong></p>
<p>In a recent post, we demonstrated how <a href="https://blogs.sas.com/content/subconsciousmusings/2025/09/05/simulated-annealing-sa-metaheuristic-in-sas-optimization/">Simulated Annealing (SA)</a> can be used to solve the <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_076/casmopt/casmopt_networksolver_details50.htm">Traveling Salesman Problem (TSP)</a> by using SAS Optimization. In this post, we extend that discussion by exploring how the Ant Colony Optimization (ACO) metaheuristic can be applied to the same problem by using SAS Optimization. We will showcase its ability to deliver competitive solutions for challenging combinatorial problems.</p>
<p>Solving large-scale, real-world optimization problems using traditional optimization algorithms is often challenging due to complex business constraints and dynamic environments. Metaheuristic algorithms often complement classical optimization techniques to overcome these limitations. Metaheuristics offer a flexible approach to exploring vast solution spaces, identifying promising regions, and generating high-quality initial solutions within practical computational limits. Traditional methods can further fine-tune these solutions to improve accuracy and performance.</p>
<h2>Ant Colony Optimization (ACO)</h2>
<p>One widely used metaheuristic is Ant Colony Optimization (ACO). This is a bio-inspired, population-based heuristic framework motivated by the foraging behavior of real ant colonies. In nature, ants collectively discover short paths between their nest and food sources by depositing pheromones along traveled routes. Over time, frequently used paths accumulate stronger pheromone trails. This reinforces good solutions through positive feedback. In the optimization context, artificial ants iteratively construct solutions by probabilistically selecting a solution based on:</p>
<ol>
<li><strong>Pheromone intensity</strong>, representing learned experience</li>
<li><strong>Heuristic information</strong>, representing problem-specific knowledge (for TSP, inverse distance)</li>
</ol>
<p>ACO has proven effective in tackling various combinatorial optimization problems, including routing, scheduling, and network design. ACO operates by simulating a colony of artificial ants that iteratively construct solutions. The algorithm balances exploration and exploitation: ants probabilistically choose paths influenced by pheromone intensity and problem-specific heuristics information. This balance enables ACO to efficiently navigate large combinatorial search spaces and avoid premature convergence to poor local optima. Over time, pheromone updates reinforce high-quality solutions, guiding the search toward near-optimal regions.</p>
<p>A key strength of ACO lies in its adaptability and robustness in handling large, complex search spaces. By leveraging collective learning and positive feedback, ACO can efficiently escape local optima and converge toward high-quality solutions.</p>
<h2>Pseudocode of the algorithm</h2>
<p>The pseudocode in this section summarizes the main logic of the ACO algorithm before translating it into PROC OPTMODEL code. Each iteration enables multiple artificial ants to construct feasible tours by using pheromone and heuristic information, identifies the best tour, updates pheromone levels to reinforce promising edges, and checks the stopping criteria. This outline provides context for the variables and equations used in the implementation.</p>
<ul>
<li><span class='MathJax_Preview'>\(\alpha\)</span><script type='math/tex'>\alpha</script>: Influence of pheromone trails</li>
<li><span class='MathJax_Preview'>\(\beta\)</span><script type='math/tex'>\beta</script>: Influence of heuristic information (inverse distance)</li>
<li><span class='MathJax_Preview'>\(\rho\)</span><script type='math/tex'>\rho</script>: Pheromone evaporation rate</li>
<li>(<em>i,</em> <em>j</em>): the directed edge (arc) from node <em>i</em> to node <em>j</em>.</li>
<li>distance (<em>i,</em> <em>j</em>): travel distance of edge (<em>i,</em>,<em>j</em>)</li>
<li><span class='MathJax_Preview'>\(\tau_{ij}\)</span><script type='math/tex'>\tau_{ij}</script>: Pheromone level or pheromone trails on edge (<em>i,</em> <em>j</em>)</li>
<li><span class='MathJax_Preview'>\(\eta_{ij}\)</span><script type='math/tex'>\eta_{ij}</script>: Heuristic desirability or heuristic information of edge (<em>i,</em> <em>j</em>), often set as 1 / distance (<em>i,</em> <em>j</em>))</li>
<li><em>iter: </em>Iteration number</li>
<li><em>k</em>: ant identifier</li>
<li><em>best_ant</em>: best ant in an iteration</li>
<li><em>obj_step</em>(<em>iter</em>,<em>k</em>): objective of that ACO iteration <em>iter</em> for ant <em>k</em></li>
<li>arc_selection_probability (<em>i,</em> <em>j</em>) = <span class='MathJax_Preview'>\((\tau_{ij})^\alpha \times (\eta_{ij})^\beta\)</span><script type='math/tex'>(\tau_{ij})^\alpha \times (\eta_{ij})^\beta</script>, is the attraction score for edge (<em>i,</em> <em>j</em>)</li>
<li><span class='MathJax_Preview'>\(\Delta\tau_{ij}\)</span><script type='math/tex'>\Delta\tau_{ij}</script><strong>: </strong>pheromone contribution by <em>best_ant</em> in each iteration on edge (<em>i,</em> <em>j</em>)</li>
<li><span class='MathJax_Preview'>\(\tau_\min\)</span><script type='math/tex'>\tau_\min</script>, <span class='MathJax_Preview'>\(\tau_\max\)</span><script type='math/tex'>\tau_\max</script>: lower/upper bounds on pheromone levels</li>
<li>Q: a constant (pheromone quantity)</li>
<li><em>best_obj</em>: best upper bound</li>
<li><em>best_iter</em>: iteration identifier corresponding to the best upper bound</li>
<li><em>aco_cons_obj_count</em>: number of iterations with the same best upper bound</li>
<li><em>max_cons_obj</em>: maximum allowable consecutive solutions</li>
<li>ANTS: Number of ants per iteration</li>
<li>ITERATIONS: Maximum number of iterations</li>
</ul>
<h3>Initialization step</h3>
<ul>
<li><span class='MathJax_Preview'>\(\tau_{ij}\)</span><script type='math/tex'>\tau_{ij}</script>: constant for all edges (1)</li>
<li>Set <em>best_obj</em> to a large value</li>
<li>Initialize random number generator</li>
</ul>
<p><em>Iterations:</em></p>
<p><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/june-pahzani-code.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-22091" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/june-pahzani-code.png" alt="" width="751" height="489" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/june-pahzani-code.png 751w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/june-pahzani-code-300x195.png 300w, https://blogs.sas.com/content/subconsciousmusings/files/2026/07/june-pahzani-code-214x140.png 214w" sizes="(max-width: 751px) 100vw, 751px" /></a></p>
<p>&nbsp;</p>
<h2>Input data</h2>
<p>To illustrate the ACO algorithm and its usefulness, we consider an example from the <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_076/casmopt/casmopt_networksolver_examples07.htm" target="_blank" rel="noopener">Traveling Salesman Tour of US Capital Cities. </a>This problem seeks the shortest route that visits the capital city of every U.S. state (and the District of Columbia), excluding Alaska and Hawaii.</p>
<h2>PROC OPTMODEL code</h2>
<p>The model is coded and solved by using the <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_075/casmopt/casmopt_optmodel_toc.htm">OPTMODEL procedure </a>in SAS Optimization. We start by defining the index sets and parameters for the TSP problem, then use a READ DATA statement to read data into them.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">   <span style="color: #000080; font-weight: bold;">proc optmodel</span>;
&nbsp;
      <span style="color: #006400; font-style: italic;">/* Declare parameters and read data */</span>
      <span style="color: #0000ff;">set</span> &lt;str,str&gt; NODEPAIRS;
      <span style="color: #0000ff;">set</span> &lt;str&gt; NODES = union <span style="color: #66cc66;">&#123;</span>&lt;i,j&gt; <span style="color: #0000ff;">in</span> NODEPAIRS<span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#123;</span>i,j<span style="color: #66cc66;">&#125;</span>;
      <span style="color: #0000ff;">set</span> &lt;str&gt; NODES_TMP;
      num distance<span style="color: #66cc66;">&#123;</span>NODEPAIRS<span style="color: #66cc66;">&#125;</span>;
      num node_id<span style="color: #66cc66;">&#123;</span>NODES<span style="color: #66cc66;">&#125;</span>;
      num id init <span style="color: #2e8b57; font-weight: bold;">1</span>;
      read <span style="color: #000080; font-weight: bold;">data</span> CitiesDist <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">where</span>=<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">upcase</span><span style="color: #66cc66;">&#40;</span>city1<span style="color: #66cc66;">&#41;</span> ne <span style="color: #0000ff;">upcase</span><span style="color: #66cc66;">&#40;</span>city2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #0000ff;">into</span> NODEPAIRS=<span style="color: #66cc66;">&#91;</span>city1 city2<span style="color: #66cc66;">&#93;</span> distance;
      <span style="color: #0000ff;">set</span> &lt;num&gt; NUM_NODES = <span style="color: #2e8b57; font-weight: bold;">1</span>..CARD<span style="color: #66cc66;">&#40;</span>NODES<span style="color: #66cc66;">&#41;</span>;
      for <span style="color: #66cc66;">&#123;</span><span style="color: #0000ff;">n</span> <span style="color: #0000ff;">in</span> NODES<span style="color: #66cc66;">&#125;</span> <span style="color: #0000ff;">do</span>;
         node_id<span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">n</span><span style="color: #66cc66;">&#93;</span> = id;
         id = id + <span style="color: #2e8b57; font-weight: bold;">1</span>;
      <span style="color: #0000ff;">end</span>;</pre></td></tr></table></div>

<p>The next line calls a macro named aco_tsp_dec, which defines index sets and variables needed for the ACO algorithm:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     %aco_tsp_dec<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>Followed by:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     <span style="color: #0000ff;">%macro</span> aco_tsp_dec<span style="color: #66cc66;">&#40;</span>
     <span style="color: #66cc66;">&#41;</span>;
&nbsp;
          <span style="color: #006400; font-style: italic;">/* Ant Colony optimization - index sets and variables */</span>
          num alpha = <span style="color: #2e8b57; font-weight: bold;">2.0</span>;
          num beta = <span style="color: #2e8b57; font-weight: bold;">7.5</span>;
          num rho = <span style="color: #2e8b57; font-weight: bold;">0.3</span>;
          num max_ants = <span style="color: #2e8b57; font-weight: bold;">20</span>;
          num max_steps = <span style="color: #2e8b57; font-weight: bold;">1000</span>;
          <span style="color: #0000ff;">set</span> &lt;num&gt; ITERATIONS = <span style="color: #2e8b57; font-weight: bold;">1</span>..max_steps;
          <span style="color: #0000ff;">set</span> &lt;num&gt; ANTS = <span style="color: #2e8b57; font-weight: bold;">1</span>..max_ants;
          num init_pheromone_trail = <span style="color: #2e8b57; font-weight: bold;">1</span>;
          num pheromone_trail<span style="color: #66cc66;">&#123;</span>NODEPAIRS<span style="color: #66cc66;">&#125;</span> init init_pheromone_trail; <span style="color: #006400; font-style: italic;">/* Initialize the pheromone trail */</span>
          num heuristic_info<span style="color: #66cc66;">&#123;</span>&lt;i,j&gt; <span style="color: #0000ff;">in</span> NODEPAIRS<span style="color: #66cc66;">&#125;</span> = <span style="color: #2e8b57; font-weight: bold;">1</span>/distance<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span>;
          num Q = <span style="color: #2e8b57; font-weight: bold;">1000</span>;
          num best_ant init <span style="color: #2e8b57; font-weight: bold;">0</span>;
          num best_iter init <span style="color: #2e8b57; font-weight: bold;">0</span>;
          num best_obj init <span style="color: #2e8b57; font-weight: bold;">100000</span>;
          num probabilities<span style="color: #66cc66;">&#123;</span>NODEPAIRS<span style="color: #66cc66;">&#125;</span>;
          num temp_cum_prob;
          num min_pher = <span style="color: #2e8b57; font-weight: bold;">0.001</span>;
          num max_pher = <span style="color: #2e8b57; font-weight: bold;">20</span>;
          num aco_starttime;
          num aco_endtime;
          num aco_runtime init <span style="color: #2e8b57; font-weight: bold;">0</span>;
          num obj_step<span style="color: #66cc66;">&#123;</span>ITERATIONS, ANTS<span style="color: #66cc66;">&#125;</span>;
          str aco_tsp_tour<span style="color: #66cc66;">&#123;</span>ITERATIONS, NUM_NODES, ANTS<span style="color: #66cc66;">&#125;</span>;
          num best_obj_step<span style="color: #66cc66;">&#123;</span>ITERATIONS<span style="color: #66cc66;">&#125;</span>;
          num node_total_probability;
          <span style="color: #0000ff;">set</span> &lt;str,str&gt; TSPEDGES init <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>;
          num next_i<span style="color: #66cc66;">&#123;</span>i <span style="color: #0000ff;">in</span> NUM_NODES<span style="color: #66cc66;">&#125;</span> = <span style="color: #0000ff;">if</span> i &lt; card<span style="color: #66cc66;">&#40;</span>NUM_NODES<span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">then</span> i+<span style="color: #2e8b57; font-weight: bold;">1</span> <span style="color: #0000ff;">else</span> <span style="color: #2e8b57; font-weight: bold;">1</span>;
          num rand_num;
          num delta_pheromone;
          str next_node;
          num aco_cons_obj_count init <span style="color: #2e8b57; font-weight: bold;">0</span>;
          num prev_best_obj;
          num dec_roundoff = <span style="color: #2e8b57; font-weight: bold;">0.1</span>;
          num max_cons_obj = <span style="color: #2e8b57; font-weight: bold;">20</span>;
          <span style="color: #0000ff;">call</span> streaminit<span style="color: #66cc66;">&#40;</span><span style="color: #2e8b57; font-weight: bold;">100</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
     <span style="color: #0000ff;">%mend</span> aco_tsp_dec;</pre></td></tr></table></div>

<p>The following statements implement the main ACO loop, iterating over ACO iterations and, within each iteration, over all ants. The <em>aco_ant_behavior</em> macro is the core of the algorithm: each ant builds a complete tour by repeatedly selecting the next edge probabilistically using the attraction score <em>arc_selection_probability(i,j)</em> (as defined in the pseudocode). Each ant starts at node_id=1 and constructs a tour until all cities are visited. This behavior mimics how real ants lay down and follow pheromone trails. The objective value of each ant’s constructed tour is evaluated by using the <em>aco_compute_obj</em> macro. Finally, the tour objective value is compared with the incumbent best solution. The best objective (<em>best_obj</em>), best iteration (<em>best_iter</em>), and best ant (<em>best_ant</em>) variables are updated whenever an improved solution is found.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     aco_starttime = <span style="color: #0000ff;">time</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
     <span style="color: #006400; font-style: italic;">/* ACO iterations */</span>
     for<span style="color: #66cc66;">&#123;</span>iter <span style="color: #0000ff;">in</span> ITERATIONS<span style="color: #66cc66;">&#125;</span> <span style="color: #0000ff;">do</span>;
        prev_best_obj = best_obj;
        for <span style="color: #66cc66;">&#123;</span>k <span style="color: #0000ff;">in</span> ANTS<span style="color: #66cc66;">&#125;</span> <span style="color: #0000ff;">do</span>;
           <span style="color: #006400; font-style: italic;">/* Construct paths for ants */</span>
           %aco_ant_behavior<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
           <span style="color: #006400; font-style: italic;">/* Evaluating objective function value */</span>
           %aco_compute_obj<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
           <span style="color: #006400; font-style: italic;">/* Updating best objective and best iteration variables
              - across all K ants */</span>
           <span style="color: #0000ff;">if</span> <span style="color: #66cc66;">&#40;</span>obj_step<span style="color: #66cc66;">&#91;</span>iter,k<span style="color: #66cc66;">&#93;</span> &lt; best_obj<span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">then</span> <span style="color: #0000ff;">do</span>;
              best_obj = obj_step<span style="color: #66cc66;">&#91;</span>iter,k<span style="color: #66cc66;">&#93;</span>;
              best_iter = iter;
              best_ant = k;
           <span style="color: #0000ff;">end</span>;
        <span style="color: #0000ff;">end</span>;
     <span style="color: #0000ff;">end</span>;</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     <span style="color: #0000ff;">%macro</span> aco_ant_behavior<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
     <span style="color: #006400; font-style: italic;">/* Compute raw attraction scores once per ant tour */</span>
     for <span style="color: #66cc66;">&#123;</span>&lt;i,j&gt; <span style="color: #0000ff;">in</span> NODEPAIRS<span style="color: #66cc66;">&#125;</span>
        probabilities<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span> = <span style="color: #66cc66;">&#40;</span>pheromone_trail<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span><span style="color: #006400; font-style: italic;">**alpha) * (heuristic_info[i,j]**beta);</span>
&nbsp;
     NODES_TMP = NODES;
     for <span style="color: #66cc66;">&#123;</span><span style="color: #0000ff;">n</span> <span style="color: #0000ff;">in</span> NODES: node_id<span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">n</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #2e8b57; font-weight: bold;">1</span><span style="color: #66cc66;">&#125;</span> <span style="color: #0000ff;">do</span>;
        aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter, <span style="color: #2e8b57; font-weight: bold;">1</span>, k<span style="color: #66cc66;">&#93;</span> = <span style="color: #0000ff;">n</span>;
        NODES_TMP = NODES_TMP diff <span style="color: #66cc66;">&#123;</span><span style="color: #0000ff;">n</span><span style="color: #66cc66;">&#125;</span>;
     <span style="color: #0000ff;">end</span>;
&nbsp;
     id = <span style="color: #2e8b57; font-weight: bold;">1</span>;
     <span style="color: #0000ff;">do</span> <span style="color: #0000ff;">while</span> <span style="color: #66cc66;">&#40;</span>CARD<span style="color: #66cc66;">&#40;</span>NODES_TMP<span style="color: #66cc66;">&#41;</span> &gt;= <span style="color: #2e8b57; font-weight: bold;">1</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
          <span style="color: #006400; font-style: italic;">/* Compute total probability */</span>
          node_total_probability = <span style="color: #0000ff;">sum</span><span style="color: #66cc66;">&#123;</span>n1 <span style="color: #0000ff;">in</span> NODES_TMP<span style="color: #66cc66;">&#125;</span>
             probabilities<span style="color: #66cc66;">&#91;</span>aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter, id, k<span style="color: #66cc66;">&#93;</span>, n1<span style="color: #66cc66;">&#93;</span>;
&nbsp;
          <span style="color: #006400; font-style: italic;">/* Scale rand_num - Avoiding normalizing the probabilities array */</span>
          rand_num = rand<span style="color: #66cc66;">&#40;</span><span style="color: #a020f0;">'UNIFORM'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #006400; font-style: italic;">* node_total_probability;</span>
          temp_cum_prob = <span style="color: #2e8b57; font-weight: bold;">0</span>;
          next_node = <span style="color: #a020f0;">''</span>;
&nbsp;
          <span style="color: #006400; font-style: italic;">/* Running sum to pick next node */</span>
          for <span style="color: #66cc66;">&#123;</span>n1 <span style="color: #0000ff;">in</span> NODES_TMP<span style="color: #66cc66;">&#125;</span> <span style="color: #0000ff;">do</span>;
             temp_cum_prob = temp_cum_prob
                + probabilities<span style="color: #66cc66;">&#91;</span>aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter, id, k<span style="color: #66cc66;">&#93;</span>, n1<span style="color: #66cc66;">&#93;</span>;
             <span style="color: #0000ff;">if</span> rand_num &lt;= temp_cum_prob <span style="color: #0000ff;">then</span> <span style="color: #0000ff;">do</span>;
                next_node = n1;
                <span style="color: #0000ff;">leave</span>;
             <span style="color: #0000ff;">end</span>;
          <span style="color: #0000ff;">end</span>;
&nbsp;
          id = id + <span style="color: #2e8b57; font-weight: bold;">1</span>;
          aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter, id, k<span style="color: #66cc66;">&#93;</span> = next_node;
          NODES_TMP = NODES_TMP diff <span style="color: #66cc66;">&#123;</span>next_node<span style="color: #66cc66;">&#125;</span>;
     <span style="color: #0000ff;">end</span>;
&nbsp;
     <span style="color: #0000ff;">%mend</span> aco_ant_behavior;</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     <span style="color: #0000ff;">%macro</span> aco_compute_obj<span style="color: #66cc66;">&#40;</span>
     <span style="color: #66cc66;">&#41;</span>;
&nbsp;
     obj_step<span style="color: #66cc66;">&#91;</span>iter,k<span style="color: #66cc66;">&#93;</span> = <span style="color: #0000ff;">sum</span><span style="color: #66cc66;">&#123;</span>i <span style="color: #0000ff;">in</span> NUM_NODES<span style="color: #66cc66;">&#125;</span> distance<span style="color: #66cc66;">&#91;</span>aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter, i,k<span style="color: #66cc66;">&#93;</span>,aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter,next_i<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>,k<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
     <span style="color: #0000ff;">%mend</span> aco_compute_obj;</pre></td></tr></table></div>

<p>The following statements update the pheromone levels on all edges by first applying evaporation and then depositing pheromone in proportion to the contribution of the <em>best_ant</em> (in each iteration) on the visited edges.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">          <span style="color: #006400; font-style: italic;">/* Updating pheromone values - across all K ants */</span>
          %aco_ant_pheromone<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     <span style="color: #0000ff;">%macro</span> aco_ant_pheromone <span style="color: #66cc66;">&#40;</span>
     <span style="color: #66cc66;">&#41;</span>;
          <span style="color: #006400; font-style: italic;">/* Evaporation of current pheromone trail values on the edges */</span>
          for <span style="color: #66cc66;">&#123;</span>&lt;i,j&gt; <span style="color: #0000ff;">in</span> NODEPAIRS<span style="color: #66cc66;">&#125;</span> pheromone_trail<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #2e8b57; font-weight: bold;">1</span>-rho<span style="color: #66cc66;">&#41;</span><span style="color: #006400; font-style: italic;">*pheromone_trail[i,j]);</span>
&nbsp;
          TSPEDGES = union<span style="color: #66cc66;">&#123;</span>i <span style="color: #0000ff;">in</span> NUM_NODES<span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#123;</span>&lt;aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter,i,best_ant<span style="color: #66cc66;">&#93;</span>,aco_tsp_tour<span style="color: #66cc66;">&#91;</span>iter,next_i<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>,best_ant<span style="color: #66cc66;">&#93;</span>&gt;<span style="color: #66cc66;">&#125;</span>;
&nbsp;
          for <span style="color: #66cc66;">&#123;</span>&lt;i,j&gt; <span style="color: #0000ff;">in</span> NODEPAIRS<span style="color: #66cc66;">&#125;</span> <span style="color: #0000ff;">do</span>;
             <span style="color: #0000ff;">if</span> &lt;i,j&gt; <span style="color: #0000ff;">in</span> TSPEDGES <span style="color: #0000ff;">then</span> delta_pheromone = Q/obj_step<span style="color: #66cc66;">&#91;</span>iter,best_ant<span style="color: #66cc66;">&#93;</span>;
             <span style="color: #0000ff;">else</span> delta_pheromone = <span style="color: #2e8b57; font-weight: bold;">0</span>;
             pheromone_trail<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span> = pheromone_trail<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span> + delta_pheromone;
             pheromone_trail<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span> = <span style="color: #0000ff;">min</span><span style="color: #66cc66;">&#40;</span>max_pher,<span style="color: #0000ff;">max</span><span style="color: #66cc66;">&#40;</span>min_pher,pheromone_trail<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
          <span style="color: #0000ff;">end</span>;
&nbsp;
     <span style="color: #0000ff;">%mend</span> aco_ant_pheromone;</pre></td></tr></table></div>

<p>During the pheromone update, edges in higher-quality tours receive larger pheromone deposits. Consider an edge (<em>i,j</em>) with current pheromone level <span class='MathJax_Preview'>\(\tau_{ij} = 0.40\)</span><script type='math/tex'>\tau_{ij} = 0.40</script>, evaporation rate <span class='MathJax_Preview'>\(\rho = 0.10\)</span><script type='math/tex'>\rho = 0.10</script>, and bounds <span class='MathJax_Preview'>\(\tau_\min = 0.10\)</span><script type='math/tex'>\tau_\min = 0.10</script>, and <span class='MathJax_Preview'>\(\tau_\max = 1.00\)</span><script type='math/tex'>\tau_\max = 1.00</script>, with <span class='MathJax_Preview'>\(Q = 1\)</span><script type='math/tex'>Q = 1</script>. Suppose two ants produce objective values of 250 and 200. Because the objective function is minimized, the ant with a value of 200 becomes the <em>best_ant</em>. The pheromone deposit is <span class='MathJax_Preview'>\(\Delta\tau_{ij} = 1/200 = 0.005\)</span><script type='math/tex'>\Delta\tau_{ij} = 1/200 = 0.005</script>. Compared to the other ant with the objective value of 250 (which would deposit 1/250 = 0.004), the <em>best_ant</em> deposits a larger amount of pheromone. As a result, edges belonging to the better tour (objective 200) receive stronger reinforcement and become more attractive in future iterations.</p>
<p>The algorithm then computes the number of consecutive iterations during which the incumbent best solution remains unchanged, compares this count with the maximum allowable threshold, and either resets the pheromone levels on all edges to their initial values or updates the counter tracking consecutive best solutions.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     <span style="color: #006400; font-style: italic;">/* Computing number of consecutive same best solution */</span>
     <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">abs</span><span style="color: #66cc66;">&#40;</span>best_obj - prev_best_obj<span style="color: #66cc66;">&#41;</span> &lt;= dec_roundoff <span style="color: #0000ff;">then</span> <span style="color: #0000ff;">do</span>;
        aco_cons_obj_count = aco_cons_obj_count + <span style="color: #2e8b57; font-weight: bold;">1</span>;
     <span style="color: #0000ff;">end</span>;
     <span style="color: #0000ff;">else</span> aco_cons_obj_count = <span style="color: #2e8b57; font-weight: bold;">0</span>;
     <span style="color: #0000ff;">if</span> aco_cons_obj_count &gt; max_cons_obj <span style="color: #0000ff;">then</span> <span style="color: #0000ff;">do</span>;
        for <span style="color: #66cc66;">&#123;</span>&lt;i,j&gt; <span style="color: #0000ff;">in</span> NODEPAIRS<span style="color: #66cc66;">&#125;</span> pheromone_trail<span style="color: #66cc66;">&#91;</span>i,j<span style="color: #66cc66;">&#93;</span> = init_pheromone_trail;
     <span style="color: #0000ff;">end</span>;
&nbsp;
     <span style="color: #006400; font-style: italic;">/* Reporting variables */</span>
     best_obj_step<span style="color: #66cc66;">&#91;</span>iter<span style="color: #66cc66;">&#93;</span> = best_obj;
     <span style="color: #0000ff;">put</span> iter= best_obj= best_iter= best_ant= aco_cons_obj_count=;
&nbsp;
     <span style="color: #0000ff;">end</span>;</pre></td></tr></table></div>

<p>The following statement extracts and outputs the best solution generated by the ACO algorithm:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     <span style="color: #006400; font-style: italic;">/* Run time of the ACO algorithm */</span>
     aco_endtime = <span style="color: #0000ff;">time</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
     aco_runtime = <span style="color: #0000ff;">intck</span><span style="color: #66cc66;">&#40;</span><span style="color: #a020f0;">'second'</span>,aco_starttime,aco_endtime <span style="color: #66cc66;">&#41;</span>;
     <span style="color: #0000ff;">put</span> aco_runtime=;
&nbsp;
     <span style="color: #006400; font-style: italic;">/* Creating output table */</span>
     TSPEDGES = union<span style="color: #66cc66;">&#123;</span>i <span style="color: #0000ff;">in</span> NUM_NODES<span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#123;</span>&lt;aco_tsp_tour<span style="color: #66cc66;">&#91;</span>best_iter, i,best_ant<span style="color: #66cc66;">&#93;</span>,aco_tsp_tour<span style="color: #66cc66;">&#91;</span>best_iter,next_i<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>,best_ant<span style="color: #66cc66;">&#93;</span>&gt;<span style="color: #66cc66;">&#125;</span>;
     <span style="color: #0000ff;">create</span> <span style="color: #000080; font-weight: bold;">data</span> TSPTourLinks <span style="color: #0000ff;">from</span> <span style="color: #66cc66;">&#91;</span>city1 city2<span style="color: #66cc66;">&#93;</span>=TSPEDGES distance;
     <span style="color: #0000ff;">create</span> <span style="color: #000080; font-weight: bold;">data</span> TSPACOIterations <span style="color: #0000ff;">from</span> <span style="color: #66cc66;">&#91;</span>Iteration_no<span style="color: #66cc66;">&#93;</span>=ITERATIONS best_obj_step;
&nbsp;
<span style="color: #000080; font-weight: bold;">quit</span>;</pre></td></tr></table></div>

<p>We execute the ACO algorithm coded within PROC OPTMODEL using the <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_076/casmopt/casmopt_networksolver_examples07.htm">input data</a>. The optimal objective value of the problem is 10,635.09. The algorithm began with a solution with an objective function value of 12,657.15 and terminated with one of 10,977.56 (a gap of <strong>3.22%</strong> from the optimal objective value). The algorithm took 143 seconds to run 1000 iterations with 20 ants per iteration. Snapshots of the iterations with starting solutions (first 20 iterations) and the final solution (last 20 iterations), from the <em>TSPACOIterations </em>table, are shown in Tables 1 and 2.</p>
<table style="margin: auto">
<tbody>
<tr>
<td style="text-align: center;padding-right: 20px"><img decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-table-1.png" alt="Table 1" width="187" /></p>
<p><em>Table 1: Solutions of the ACO algorithm from the first 20 iterations</em></td>
<td style="text-align: center"><img decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-table-2.png" alt="Table 2" width="183" /></p>
<p><em>Table 2: Solutions of the ACO algorithm from the last 20 iterations</em></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>The performance and quality of solutions produced by the ACO algorithm are strongly influenced by the choice of runtime parameters, such as the influence of pheromone trails, the influence of heuristic information, the pheromone evaporation rate, the number of iterations, the number of ants per iteration, and the pheromone update rule. Extensive and careful tuning of these parameters enhances the robustness of the search process, leading to improved solution quality, greater diversity, and more effective exploration of complex optimization landscapes. Equally important is the solution construction mechanism in ACO: designing procedures that construct feasible solutions is a requirement for the algorithm, and a fundamental requirement for metaheuristic approaches in general.</p>
<h2>Plots of solutions</h2>
<p>The statements for producing a graphical display of the solution can be referred to in the example of the <a style="font-size: 14px" href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_076/casmopt/casmopt_networksolver_examples07.htm" target="_blank" rel="noopener">Traveling Salesman Tour of US Capital Cities</a><span style="font-size: 14px">.</span> The early-stage ACO solution (iteration 1) produces scattered, inefficient routes with many unnecessary crossings and detours, as shown in Figure 1. Figure 2 shows the converged ACO solution (iteration 500), where the algorithm generates better-structured, geographically coherent routes that demonstrate improved optimization.</p>
<figure style="width: 295px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-1.png" alt="" width="295" height="208" /><figcaption class="wp-caption-text"><em style="font-size: 14px">Figure 1: ACO solution in iteration 1</em></figcaption></figure>
<figure style="width: 297px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-2.png" alt="" width="297" height="209" /><figcaption class="wp-caption-text"><em style="font-size: 14px">Figure 2: ACO solution in iteration 500</em></figcaption></figure>
<p>Figures 3 and 4 show the optimal solution and the best-cost tour of the capital cities obtained by the ACO algorithm. The best-cost ACO solution (Figure 4) represents a well-organized, near-optimal tour that efficiently connects all cities with minimal crossings and a reduced total travel distance.</p>
<figure style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-3.png" alt="" width="300" height="225" /><figcaption class="wp-caption-text"><em style="font-size: 14px">Figure 3: Optimal solution</em></figcaption></figure>
<figure style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-4.png" alt="" width="300" height="225" /><figcaption class="wp-caption-text"><em style="font-size: 14px">Figure 4: Best solution from ACO</em></figcaption></figure>
<p>In the northwest region (shown in Figures 5 and 6), the ACO solution matches the optimal route, capturing the same optimal tour in this part of the network.</p>
<figure style="width: 160px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-5-1.png" alt="" width="160" height="252" /><figcaption class="wp-caption-text"><em style="font-size: 14px">Figure 5: Optimal solution - Northwest</em></figcaption></figure>
<figure style="width: 159px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-6.png" alt="" width="159" height="253" /><figcaption class="wp-caption-text"><em style="font-size: 14px">Figure 6: Best solution from ACO - Northwest</em></figcaption></figure>
<p>We also observe differences in routes between the optimal solution and the best solution from the ACO algorithm, reflecting the heuristic nature of the search. Figures 7 and 8 present the optimal tour and the best ACO solution for the Northeast region. The ACO solution shows small local crossings and route overlaps in dense regions, reflecting inefficiencies in the search process. This highlights the importance of careful parameter tuning to enhance convergence and solution quality in ACO.</p>
<figure style="width: 111px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-7.png" alt="" width="111" height="292" /><figcaption class="wp-caption-text">Figure 7: Optimal solution - Northeast</figcaption></figure>
<figure style="width: 101px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" style="font-size: 14px" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-8.png" alt="" width="101" height="293" /><figcaption class="wp-caption-text">Figure 8: Best solution from ACO</figcaption></figure>
<p>The following statements generate plots of the iterations and the progress of the best objective value.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sas" style="font-family:monospace;">     <span style="color: #006400; font-style: italic;">/* Progress of best objective */</span>
     <span style="color: #0000ff;">title</span> <span style="color: #a020f0;">'Iterations vs best objective value'</span>;
     <span style="color: #0000ff;">%let</span> optimal = <span style="color: #2e8b57; font-weight: bold;">10635</span>;
     <span style="color: #000080; font-weight: bold;">proc sgplot</span> <span style="color: #000080; font-weight: bold;">data</span>=TSPACOIterations noautolegend;
        step <span style="color: #0000ff;">x</span>=Iteration_no y=best_obj_step / markers;
        refline <span style="color: #0000ff; font-weight: bold;">&amp;optimal</span>.;
        xaxis <span style="color: #0000ff;">label</span>=<span style="color: #a020f0;">'Iteration'</span>;
        yaxis <span style="color: #0000ff;">label</span>=<span style="color: #a020f0;">'Objective Value'</span> <span style="color: #0000ff;">min</span>=<span style="color: #2e8b57; font-weight: bold;">10500</span>;
     <span style="color: #000080; font-weight: bold;">run</span>;</pre></td></tr></table></div>

<p>&nbsp;</p>
<p>Figure 9 shows the plot of the best objective value found as a function of the number of iterations. The overall downward trend reflects the algorithm’s effectiveness in navigating the solution landscape towards near-optimality. Figure 9 also highlights the exploration–exploitation trade-off: rapid early gains from exploration, followed by slower convergence as the algorithm intensifies the search near high-quality solutions.</p>
<figure id="attachment_21836" aria-describedby="caption-attachment-21836" style="width: 429px" class="wp-caption aligncenter"><a href="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-9.png"><img loading="lazy" decoding="async" class="wp-image-21836 size-full" src="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-9.png" alt="Ant Colony Optimization metaheuristic - Figure 9: Iterations vs best objective value" width="429" height="322" srcset="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-9.png 429w, https://blogs.sas.com/content/subconsciousmusings/files/2026/06/june-pahzani-figure-9-300x225.png 300w" sizes="(max-width: 429px) 100vw, 429px" /></a><figcaption id="caption-attachment-21836" class="wp-caption-text">Figure 9: Iterations vs best objective value</figcaption></figure>
<h2>Conclusion</h2>
<p>This post demonstrates how to implement an ACO metaheuristic algorithm in <em>PROC OPTMODEL. </em>It applies it to a TSP instance from the SAS documentation. The results illustrate the characteristic ACO search dynamics: solution construction guided by pheromone and heuristic information, progressive reinforcement of high-quality edges through pheromone updates, and gradual improvement in the best objective value over the course of the iterations.<br />
Metaheuristics such as ACO are often most effective when used alongside exact or specialized algorithms. The ACO algorithm provides only an approximate solution to the problem, not a globally optimal one. However, it could be useful for obtaining a good, feasible solution to a wide variety of complex, real-world problems, serving as a warm start within a unified optimization workflow. Other applications of ACO include vehicle routing problems and extensions, multicommodity network design, and scheduling problems.</p>
<p>To explore further, SAS Optimization has specialized solvers for various <a href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_076/casmopt/casmopt_networksolver_overview.htm">graph theory, combinatorial optimization, and network analysis algorithms, </a>including<a href="https://go.documentation.sas.com/doc/en/pgmsascdc/v_076/casmopt/casmopt_networksolver_overview.htm"> TSP</a>.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/07/10/ant-colony-optimization-metaheuristic/">Ant Colony Optimization metaheuristic in SAS Optimization</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/07/10/ant-colony-optimization-metaheuristic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/07/pahzani-banner-150x150.png" />
	</item>
		<item>
		<title>Agentic AI in banking: Turning customer insights into action</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/06/26/agentic-ai-banking/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/06/26/agentic-ai-banking/#respond</comments>
		
		<dc:creator><![CDATA[Mariann Vonatski]]></dc:creator>
		<pubDate>Fri, 26 Jun 2026 20:07:52 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agentic AI]]></category>
		<category><![CDATA[banking]]></category>
		<category><![CDATA[customer decisioning]]></category>
		<category><![CDATA[customer experience]]></category>
		<category><![CDATA[intelligent decisioning]]></category>
		<category><![CDATA[personalization]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=21779</guid>

					<description><![CDATA[<p>Learn how banks can combine customer insights, centralized decisioning, and agentic AI in SAS Viya to deliver more consistent, explainable, and personalized customer interactions across every channel.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/06/26/agentic-ai-banking/">Agentic AI in banking: Turning customer insights into action</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>When good insights lead to confusing experiences</h2>
<p>Banks know a lot about their customers. They know how often someone logs in, what products they use, how they tend to spend or save, and even what they might need next. That level of insight has never been the problem. The problem is what happens next.</p>
<p>A customer might receive an email encouraging them to open a savings account. At the same time, they might see a message in their banking app about a credit product. If they call support, the conversation might go in a different direction. Each interaction makes sense on its own. But together, they feel disconnected.</p>
<p>From the customer’s point of view, the bank is not acting like one organization. It feels like a collection of systems making independent decisions. That is the challenge this article focuses on.</p>
<h2>From Hackathon idea to real-world use case: Decision-led banking</h2>
<p>This use case was originally developed by the <a href="https://communities.sas.com/t5/SAS-Hacker-s-Hub/Banco-de-Bogot%C3%A1/tac-p/977293/highlight/true#M1122">Banco de Bogotá team</a> as part of the <a href="https://www.sas.com/sas/events/hackathon.html">2025 SAS Hackathon</a>. Their goal was to explore how banks can move from fragmented customer engagement to a more coordinated, decision-led approach—where decisions are made once and carried through consistently across channels.</p>
<p>The approach itself is straightforward. The bank started with basic information, such as demographics and preferences, to build an initial understanding. It then learned from customer behavior over time through transactions and interactions. As that picture became clearer, it continuously refined how customers were grouped and used that understanding to guide what the bank should say or do next.</p>
<p>This type of approach is often referred to as customer 360 or customer segmentation. It works well for understanding customers. But it still leaves a key question unanswered: <strong>How does the bank turn that understanding into one clear, consistent action?</strong></p>
<h2>Why consistency is so hard</h2>
<p>In most banks, decisions are not made in one place. Marketing, digital, service, and product teams often manage their own channels, tools, and priorities. Even when they are working from the same customer data, they are not always acting on it in the same way. This is why customers receive mixed messages.</p>
<p>It is not a data problem. It is a coordination problem. And most banks are not structured to solve that problem centrally.</p>
<h2>A different approach: decide once, act everywhere</h2>
<p>Instead of letting every system decide what to do independently, a better approach is to make one decision and use it everywhere. That decision answers a simple question: <strong>What is the single most relevant action for this customer right now, and how do we make sure every channel delivers that same message?</strong></p>
<p>This is where SAS Intelligent Decisioning comes into play. It allows banks to bring together data, models, and business rules in one place so decisions can be made consistently.</p>
<p>But there is still another challenge. Even when the bank knows the right action, it must explain why that action was chosen, communicate it clearly to the customer, and make sure the tone fits the situation.</p>
<p>This is where agentic AI becomes useful. It allows banks to support decision-making with AI in a controlled way, improving how decisions are communicated and understood without changing how they are made.</p>
<h2>What an AI agent actually does in this context</h2>
<p>An AI agent in banking is not a chatbot, and it is not replacing decisions. It acts more like a coordinator within the decisioning process, helping translate decisions into clear, consistent customer interactions.</p>
<p>It helps with two important things:</p>
<ol>
<li>Turning decisions into clear communication</li>
<li>Turning technical reasoning into understandable explanations</li>
</ol>
<p>For example, a model might indicate that a customer is likely to benefit from a savings product, while business rules confirm they are eligible and that the timing makes sense. The decisioning system selects that action, and the AI agent helps translate it into a message the customer can understand.</p>
<p>At that point, the AI agent helps draft a message that is clear and appropriate, translates technical reasoning into simple language, and ensures the communication aligns with the bank’s tone and policies.</p>
<p>The decision remains controlled and governed. The AI helps make that decision easier to understand and easier to deliver.</p>
<h2>Where the SAS Agentic AI Accelerator fits in</h2>
<p>Up to this point, the focus has been on making better decisions and keeping those decisions consistent. The next step is making those decisions easier to communicate and easier to understand. This is where the SAS Agentic AI Accelerator fits in.</p>
<p>The accelerator provides a structured way to introduce AI into existing decision workflows without disrupting how decisions are made. Instead of treating AI as a separate experiment, it becomes part of the system in a controlled and repeatable way.</p>
<p>In this example, the accelerator would be used to build an AI agent that sits alongside the decisioning process and helps with two key tasks.</p>
<p>First, it helps turn decisions into clear communication. Once a decision is made, the agent can generate customer-facing messages that are consistent in tone, aligned with policy, and tailored to the situation.</p>
<p>Second, it helps turn technical logic into understandable explanations. It can take model outputs and decision rules and translate them into simple language that can be used by customer support teams or even shared directly with customers when appropriate.</p>
<p>The important part is that the AI is not making the decision—it is supporting how that decision is delivered. By using the Agentic AI Accelerator, teams can build this capability once and reuse it across channels, instead of relying on separate teams or systems to interpret decisions in different ways.</p>
<h2>Bringing it all together</h2>
<p>The Banco de Bogotá use case shows how banks can better understand their customers over time. The next step is making sure that understanding leads to clear, consistent action.</p>
<p>By combining customer insight and segmentation, centralized decisioning, and agentic AI for communication and explanation, banks can move toward a model where customers receive fewer but more relevant messages, interactions feel more intentional, and decisions are easier to apply consistently and explain clearly.</p>
<p>This is not about adding more technology. It is about making existing capabilities work together more effectively.</p>
<p>Customers do not see systems, models, or channels. They experience conversations.<br />
When those conversations are consistent, trust grows. When they are inconsistent, even strong insights lose their value. Agentic AI, used in the right way, helps bridge that gap—not by making decisions on its own, but by helping organizations act on their decisions more clearly and consistently.</p>
<p>This is where the Agentic AI Accelerator becomes practical. It provides the structure to build these agent-based capabilities in a way that is consistent, reusable, and aligned with how decisions are already managed in SAS Viya.</p>
<h2>Explore the Agentic AI Accelerator</h2>
<p>If this approach resonates, a good next step is to explore the <a href="https://github.com/sassoftware/sas-agentic-ai-accelerator">SAS Agentic AI Accelerator on GitHub</a>. The repository provides a practical starting point for building agent-based workflows in SAS Viya, including examples, reusable components, and guidance on how to bring together decisioning, AI, and orchestration in a structured way.</p>
<p>It is designed to help teams move beyond ideas and experiments and begin building real, governed solutions that can scale. Whether you are just starting to explore agentic AI or looking to expand existing decisioning workflows, it offers a clear path to begin testing, learning, and applying these concepts in your own environment.</p>
<h2>From Hackathon idea to real-world use case</h2>
<p>If you are interested in how this idea was developed, you can explore the team and their work on the SAS Hackathon platform: <a href="https://communities.sas.com/t5/SAS-Hacker-s-Hub/Banco-de-Bogot%C3%A1/tac-p/977293/highlight/true#M1122">Banco de Bogotá – SAS Hackers Hub</a>.</p>
<p>The SAS Hackathon provides a space for teams like this to take real business challenges, combine data, analytics, and AI, and build practical solutions in a short period of time. Many of the concepts explored in this article, including centralized decisioning and agentic AI, are being actively tested and refined through these hackathon projects.</p>
<p>This is a strong example of how innovation does not always start with large transformation programs. Sometimes it starts with a focused use case, a small team, and the right tools to connect insight to action.</p>
<p>Behind the scenes, these agentic workflows can be connected to trusted SAS analytics, models and decision services through <a href="https://www.sas.com/en_us/software/viya/mcp-server.html">SAS Viya MCP Server</a>. This enables AI agents to move beyond conversation and securely execute governed business actions using the analytical capabilities <a href="https://github.com/sassoftware/sas-mcp-server">already available</a> in SAS Viya.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://youtu.be/DqTXug8YJy4">Agentic AI for Banking with SAS Viya MCP Server and Claude Cowork</a></li>
<li><a href="https://www.youtube.com/watch?v=ZG2EuXLh1tY">SAS Agentic AI Accelerator | SAS Viya April and May 2026 Release</a></li>
<li><a href="https://communities.sas.com/t5/SAS-Communities-Library/Introducing-the-SAS-Agentic-AI-Accelerator-Build-AI-Agents/ta-p/977176">Introducing the SAS Agentic AI Accelerator: Build AI Agents Seamlessly in SAS Viya</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/05/22/how-agentic-ai-accelerates-sme-credit-decisions-with-sas-viya/">How Agentic AI Accelerates SME Credit Decisions with SAS Viya</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/05/29/agentic-ai-for-workforce-analytics/">Agentic AI for Workforce Analytics: Reducing attrition with personalized, LLM-powered guidance</a></li>
<li><a href="https://blogs.sas.com/content/subconsciousmusings/2026/06/09/modernizing-attendance-ticketing/">Modernizing user attendance center ticket handling with trusted agentic AI</a></li>
</ul>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/06/26/agentic-ai-banking/">Agentic AI in banking: Turning customer insights into action</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/06/26/agentic-ai-banking/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/BancoDeBogota-150x150.png" />
	</item>
		<item>
		<title>Scaling submission automation with SAS Clinical Acceleration on Viya</title>
		<link>https://blogs.sas.com/content/subconsciousmusings/2026/06/19/scaling-submission-automation-with-sas-clinical-acceleration-on-viya/</link>
					<comments>https://blogs.sas.com/content/subconsciousmusings/2026/06/19/scaling-submission-automation-with-sas-clinical-acceleration-on-viya/#respond</comments>
		
		<dc:creator><![CDATA[Kayt Leonard]]></dc:creator>
		<pubDate>Fri, 19 Jun 2026 18:19:17 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[clinical trials]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[data management]]></category>
		<category><![CDATA[regulatory compliance]]></category>
		<category><![CDATA[SAS Viya]]></category>
		<category><![CDATA[submission automation]]></category>
		<guid isPermaLink="false">https://blogs.sas.com/content/subconsciousmusings/?p=21757</guid>

					<description><![CDATA[<p>SAS Clinical Acceleration on Viya helps life sciences teams scale clinical submissions by automating derivations, embedding validation, and producing submission-ready outputs within a governed, cloud-native environment.</p>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/06/19/scaling-submission-automation-with-sas-clinical-acceleration-on-viya/">Scaling submission automation with SAS Clinical Acceleration on Viya</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Clinical programming teams are under pressure to deliver submission-ready data faster, with fewer handoffs and less rework. <a href="https://www.sas.com/en_us/software/clinical-acceleration.html">SAS Clinical Acceleration on Viya</a> is designed to help life sciences organizations modernize that path by combining controlled clinical data management, validation, analytics, and submission output generation in one governed environment.</p>
<h2>A new model for submissions</h2>
<p>For years, submission delivery has depended on a patchwork of code, spreadsheets, manual checks, and document assembly. That approach can work for a single study, but it becomes fragile when scaled across programs, therapeutic areas, vendors, and global regulatory timelines. SAS Clinical Acceleration on Viya addresses that problem by centralizing data, automating lineage tracking, and supporting collaborative analysis in a validated platform.</p>
<p>What makes this approach different is that it is not just a compute environment. It combines a secure clinical data repository with a statistical computing layer, built for regulated work and aligned to submission needs. The result is a more repeatable process for moving from raw clinical data to SDTM, ADaM, review-ready outputs, and regulatory packages.</p>
<h2>Automated derivations at scale</h2>
<p>One of the biggest gains comes from reducing repetitive derivation work. In a traditional setup, SAS programmers often rebuild similar SDTM and ADaM logic study after study, with variation introduced by local conventions, vendor differences, or late changes to specifications. SAS Clinical Acceleration supports reusable, standardized workflows so derivations can be applied consistently across studies and batches.</p>
<p>That matters for programming directors and study teams because it shifts effort from manual construction to controlled reuse. Instead of maintaining multiple isolated code streams, teams can run chained programs in batch, preserve traceability, and keep execution in one qualified environment. SAS Viya supports SAS, <a href="https://developer.sas.com/open-source/r">R</a>, and <a href="https://developer.sas.com/open-source/python">Python</a> in a governed setting, which helps open-source programmers contribute where appropriate without fragmenting compliance controls.</p>
<h2>Validation built into workflow</h2>
<p>Validation is often treated as a separate checkpoint, but in a scaled submission model it needs to be part of the workflow itself. SAS Clinical Acceleration includes validation capabilities, audit trails, electronic signatures, versioning, and role-based privileges to support compliance with 21 CFR Part 11 and CDISC-related standards.</p>
<p>That embedded control structure helps teams avoid late-stage surprises. Conformance checks, traceability reviews, and reproducibility controls can be applied as part of routine execution rather than as a manual end-of-line exercise. For compliance leaders, that means stronger inspection readiness; for programmers, it means fewer downstream reruns caused by missing checks or undocumented changes.</p>
<h2>Submission-ready output generation</h2>
<p>A major bottleneck in clinical development is not only analysis, but assembly. Final submissions require datasets, metadata, define.xml, documentation, and reviewer support materials to line up cleanly and consistently. SAS Clinical Acceleration is positioned to support that end-to-end flow by integrating analysis, validation, and submission preparation in the same environment.</p>
<p>That integrated model reduces the risk of version mismatch between outputs, metadata, and supporting documents. It also helps teams move faster because the final package is produced from the same governed source of truth used for derivations and review. In practice, this can shorten the path from database lock to submission-ready package while improving confidence in the final deliverables.</p>
<h2>Why leadership should care</h2>
<p>For directors of programming and IT, the business case is straightforward: less manual effort, fewer defects, faster cycle times, and more predictable delivery. SAS positions Clinical Acceleration as a cloud-native platform that helps manage, validate, analyze, and submit clinical research data more efficiently, with scalable analytics and collaborative workflows on Viya.</p>
<p>For compliance teams, the value is governance and traceability. For SAS programmers, it is reusable logic and a controlled execution framework. For open-source contributors, it is the ability to bring Python or R into a regulated workflow without losing oversight. That combination is important because modern clinical development increasingly depends on hybrid teams and hybrid methods.</p>
<h2>Operating at enterprise scale</h2>
<p>The real promise of Viya is scalability across studies and portfolios. Containerized, cloud-native execution supports broader deployment models, whether on-premises or in the cloud, while still preserving controlled access and auditability. SAS also highlights integrations with EDC, validation tools, and metadata repositories, which are essential for enterprise-scale clinical operations.</p>
<p>This matters when organizations need to run many studies in parallel, support external partners, and standardize submission practices across regions. Instead of treating automation as a point solution for one protocol, leaders can use Clinical Acceleration to establish a submission factory model: standardized inputs, governed derivations, automated checks, and packaged outputs ready for regulatory review.</p>
<h2>Closing perspective</h2>
<p>Scaling submission automation is no longer just an efficiency initiative; it is a strategic capability for modern clinical development. SAS Clinical Acceleration on Viya gives life sciences organizations a practical path to automate derivations, embed validation, and generate submission-ready output in a governed, reproducible way.</p>
<p>For leadership teams, the payoff is clearer timelines, better inspection readiness, and a stronger foundation for future innovation. In a landscape where speed and compliance must coexist, that combination is especially valuable.</p>
<h3>Learn more</h3>
<ul>
<li><a href="https://communities.sas.com/t5/SAS-Communities-Library/The-SAS-Clinical-Acceleration-Repository-A-Game-Changer-for/ta-p/965038">The SAS Clinical Acceleration Repository: A Game Changer for Clinical Research</a></li>
<li><a href="https://www.youtube.com/watch?v=HsVQ2dM4jXc">Accelerating Clinical Analytics: Your Path from SAS LSAF or SAS 9 to SAS Clinical Acceleration</a></li>
<li><a href="https://www.youtube.com/watch?v=phI8elD_GGs">Transforming Clinical Programming With SAS Clinical Acceleration</a></li>
<li><a href="https://www.youtube.com/watch?v=sjTJ2-Q9ftA">Accelerating Clinical Trial Innovations With SAS Viya and Generative AI</a></li>
</ul>
<p>The post <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings/2026/06/19/scaling-submission-automation-with-sas-clinical-acceleration-on-viya/">Scaling submission automation with SAS Clinical Acceleration on Viya</a> appeared first on <a rel="nofollow" href="https://blogs.sas.com/content/subconsciousmusings">The SAS Data Science Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.sas.com/content/subconsciousmusings/2026/06/19/scaling-submission-automation-with-sas-clinical-acceleration-on-viya/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<enclosure url="https://blogs.sas.com/content/subconsciousmusings/files/2026/06/lifesciences-150x150.jpg" />
	</item>
	</channel>
</rss>
