← Back to Blog

Tag Inference: When Your Cost Allocation Data Has Gaps

Article illustration

Every FinOps team eventually confronts the same problem: the cost allocation report has a "no tag" or "unallocated" bucket that contains anywhere from 15% to 60% of total spend. The team knows they have a tagging problem. The platform team has sent three memos about tagging compliance. There is a policy. The policy is not being followed consistently.

The enforcement approach — block resource creation without required tags — is theoretically correct and practically difficult. Engineers work around it. Emergency deploys skip tag validation. Managed platform services create resources that can't be tagged at the resource level. After two years of trying to enforce perfect tagging, most organizations have better coverage than they started with and a persistent untagged tail that won't go away.

Tag inference is a pragmatic alternative to trying to achieve perfect coverage. Instead of asking "why isn't this resource tagged," ask "what do we know about this resource that lets us attribute its cost anyway?" The answer is usually more than you'd expect.

The Signals Available for Inference

When a resource doesn't have the tag you want (say, an "owner" or "team" tag), several other data sources often allow you to infer ownership:

Resource naming conventions. Most engineering organizations have established naming patterns, even when tagging compliance is poor. A compute instance named "prod-payments-worker-03" can be attributed to the payments team with high confidence. An object storage bucket named "data-platform-raw-ingestion" belongs to the data platform team. Naming inference works well for organizations with consistent naming and degrades for organizations with ad-hoc names.

Account and project structure. Cloud accounts and projects are often organized by team or product line. Untagged resources in the "payments-prod" account can be attributed to the payments team at the account level, even without resource-level tags. This is coarser attribution but better than "unallocated."

Network placement. Resources in a particular subnet, VPC, or network segment often share ownership. If the payments team owns the 10.0.5.x subnet and an untagged database lives there, that's a strong attribution signal.

Security group and IAM role associations. Resources attached to team-specific security groups or granted team-specific IAM roles can be attributed accordingly.

Historical tagging patterns. If a resource was tagged six months ago, had its tag removed during a migration, and has the same naming pattern as currently tagged resources, the historical tag is a strong prior for attribution.

Building a Practical Inference Pipeline

A workable inference pipeline processes attribution signals in order of confidence and assigns untagged resources to the highest-confidence attribution:

1. Direct tag match — the resource has the required tag. This is ground truth. No inference needed.

2. Account-level attribution — the resource lives in a single-team account. High confidence, coarse attribution.

3. Name pattern match — the resource name matches a known team's naming convention. High confidence where naming is consistent.

4. Network inference — the resource is in a team-owned network segment. Medium confidence.

5. Related resource inference — the resource is attached to or dependent on a tagged resource. Medium confidence.

6. Historical attribution — the resource was previously tagged. Medium-to-low confidence depending on how long ago.

7. Residual unallocated — none of the above signals are strong enough. This bucket should be small if the pipeline is working.

The output of this pipeline is an attribution confidence score for each resource, alongside the inferred owner. Resources with high-confidence inference can be treated as effectively tagged for cost reporting purposes. Resources with low-confidence inference are surfaced for manual review.

What to Do About Confidence Levels in Reports

The temptation is to present inferred attribution with the same visual weight as tagged attribution in cost reports. Resist this. Finance and team leads who see a cost report showing "payments team: $42,000" need to know whether that number is based on direct tagging or on inference, because the right response to "we spent more than expected" differs depending on attribution confidence.

A practical approach: show inferred costs separately from tag-based costs, with a coverage metric (what percentage of the team's attributed spend is directly tagged versus inferred). A team at 85% direct tag coverage is doing well; the inferred 15% is probably accurate enough to act on. A team at 40% direct tag coverage is one where the inferred numbers carry significant uncertainty.

This framing also creates productive conversations with teams. "Your team's spend is $42k, of which $28k is directly tagged and $14k is inferred from account and naming patterns. Here are the specific resources in the inferred bucket." That conversation is more actionable than "your team's spend is $42k but 33% is unallocated."

When Inference Isn't Enough

Some untagged resources genuinely can't be inferred. Platform-level services that create resources automatically without team attribution, shared infrastructure that legitimately belongs to no single team, and resources from merged or deprecated teams all fall into a residual category that inference can't reliably attribute.

For these, the right approach is a cost allocation key — a rule-based split that distributes shared costs to teams based on a proxy metric. The shared monitoring infrastructure gets split proportionally to each team's resource count. The shared networking infrastructure gets split proportionally to data transfer volume. These aren't precise attributions, but they're better than leaving the cost unallocated indefinitely.

KernelRun's attribution engine implements the full inference pipeline — name patterns, account structure, network placement, and historical tags — and surfaces the confidence score for each attributed resource. It's not magic; it works better with good naming conventions and worse with ad-hoc names. But for most organizations, it gets unallocated spend from 30-40% down to under 10% without requiring a tagging enforcement campaign.

Reduce your unallocated spend from 40% to under 10%

KernelRun's inference engine attributes untagged resources using naming patterns, account structure, and network signals. Connect and see your coverage score in minutes.

Request a Demo