docs: add release note for Signals ML feature attributes - #1925
docs: add release note for Signals ML feature attributes#1925Matus Tomlein (matus-tomlein) wants to merge 5 commits into
Conversation
Announces the three attribute-definition additions that support building ML model features on Signals attributes: the time_since_last and time_since_first aggregations, the date_part modifier on timestamp properties, and the optional event filter. The reference documentation for all three shipped in #1909; this is the follow-up release note for it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Missing SEO metadataThe following markdown files are missing required metadata fields:
Required fieldsThe file metadata is important for SEO and marketing. All markdown files, except for those with filenames starting with
Please add the missing metadata. |
Greptile SummaryAdds a Signals release note describing time-since aggregations, timestamp date-part modifiers, and optional event filters, with links to the attribute and ML training-dataset references.
Confidence Score: 4/5The batch-group availability claim should be corrected before merging because that group type synchronizes pre-calculated values rather than defining these attributes. The feature details otherwise align with the reference documentation, but the release note currently directs readers toward an unsupported batch attribute-group configuration. Files Needing Attention: release-notes/new-in-signals-attributes-for-ml-features/index.md
|
| Filename | Overview |
|---|---|
| release-notes/new-in-signals-attributes-for-ml-features/index.md | The feature descriptions agree with the current attribute reference, but the final availability statement incorrectly extends attribute-definition features to batch attribute groups. |
Reviews (1): Last reviewed commit: "docs: add release note for Signals ML fe..." | Re-trigger Greptile
|
|
||
| ## Get started | ||
|
|
||
| All three are available in Console and in the Python SDK, for both stream and batch attribute groups. Upgrade to `snowplow-signals` version 0.4.8 or later to define them from the SDK. |
There was a problem hiding this comment.
Batch availability is incorrect
When readers apply these attribute-definition features to a warehouse-backed batch group, the group only synchronizes pre-calculated values and performs no attribute calculation, causing them to pursue an unsupported configuration.
| All three are available in Console and in the Python SDK, for both stream and batch attribute groups. Upgrade to `snowplow-signals` version 0.4.8 or later to define them from the SDK. | |
| All three are available in Console and in the Python SDK for stream attribute groups. Upgrade to `snowplow-signals` version 0.4.8 or later to define them from the SDK. |
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Docs style reviewReviewed against What is already correct: frontmatter matches Four things worth changing. 1. Passive voice (style guide, Writing style: "Use active voice")Several of the load-bearing explanatory sentences are passive:
Suggested fixes, naming the actor (Signals) in each case:
2. "visitor" instead of "the user" (style guide, Writing style: use "the user" for the reader's end users)
The rest of the note correctly says "a user" ("a user's page views", "how many separate days a user has been active"), and "visitor" appears nowhere else in 3. Trailing periods on single-sentence list items (style guide, Lists: "No period at the end unless the item contains multiple sentences")
Both bullets in that list are single sentences, so drop the final period from each. 4. Conversational asides in place of a technical tone (CLAUDE.md: "Use professional, technical tone")Two spots read as opinion rather than description:
Suggested rewrites:
Minor
|
There was a problem hiding this comment.
Pull request overview
Adds a new Product news release note announcing three recently shipped Signals attribute-definition enhancements that make common ML features easier to express (recency/tenure aggregations, date_part modifiers for timestamp properties, and an optional event filter).
Changes:
- Introduces a new release note page for the Signals attribute-definition updates relevant to ML feature engineering.
- Summarizes
time_since_last/time_since_first,date_part, and match-all semantics forevents=[](and related SDK guidance). - Provides links to the related prior release note and reference documentation.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| - "Signals" | ||
| - "AI tools" | ||
| --- | ||
| Signals recently gained a [training dataset builder](/release-notes/new-in-signals-ml-training-datasets/), which turns the attribute groups you already serve from into a labeled training table in your warehouse. That closed the gap between training and serving: the same attribute definition produces the feature your model trains on and the feature it scores against. |
|
|
||
| This makes a general engagement counter a single definition rather than a list of schemas to maintain, and it means an attribute over an atomic property picks that property up wherever it appears. A first-touch `mkt_medium` attribute captures the value from whichever event carried it, with no need to work out in advance which schemas those might be. | ||
|
|
||
| Because an empty filter is indistinguishable from one you forgot to fill in, it has to be set deliberately. A request that sends an empty event list is read as matching all events rather than rejected, so it's worth confirming that's what you meant. |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
documentation | 34ea665 | Commit Preview URL Branch Preview URL |
Aug 27 2026, 02:20 PM |
Applies the human-voice guidance: drops the preview paragraph that restated all three sections, removes unsourced claims about how predictive recency is and how useless raw timestamps are, replaces the "part of the calendar that carries the signal" heading and phrasing, and leads each section with what shipped rather than a problem/solution beat. Also converts the two-item bullet list to prose and aligns the closing heading with the ML training datasets note. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Restructures each section around a short Python example instead of explaining the mechanics in prose, and replaces the date_part explanation with a table showing what each aggregation over hour_of_day returns. Down from 900 to 650 words. All three examples and the aggregation table were verified by constructing them against snowplow-signals 0.4.8. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Rewrites the note to lead with the kinds of model features these additions enable rather than the mechanics of the API. Opens on the timing and habit questions a propensity model asks, groups the three changes as recency/tenure, seasonality/habit, and whole-pipeline features, and moves the detail into deep links to the relevant docs sections and examples. Drops the Python examples, which duplicated the documentation, and the dataset-builder framing from the opening sentence. Down to 575 words. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Using time since aggregations in intervention rules isn't a recommended pattern and has edge cases, so the note shouldn't point people at it. Keeps the read-time computation point, which is what matters for model features. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
jborlase-snowplow
left a comment
There was a problem hiding this comment.
Left a couple comments on naming
|
|
||
| Combined with the aggregations Signals already has, that covers a useful range. Peak shopping hour, most common active weekday, an hour-by-hour histogram of when someone engages, or a count of the distinct days they have shown up, which is a decent proxy for habit. Date parts also work in [criteria](/docs/signals/attributes/attributes/#filter-with-criteria), so you can build features from weekday traffic only. | ||
|
|
||
| ## Whole-pipeline features |
There was a problem hiding this comment.
Rather than whole-pipeline, should we call it 'All event features'?
|
|
||
| Some features are about a user's overall activity rather than one behavior, and those needed you to list every event schema in your pipeline and keep the list current. The [event filter is now optional](/docs/signals/attributes/attributes/#select-events): leave it empty and the attribute covers every event Signals processes, including event types you add later. | ||
|
|
||
| That makes total engagement counters a single definition, and it lets an attribute follow a property wherever it appears, such as capturing first-touch `mkt_medium` from whichever event carried it. Worth knowing: an empty filter looks the same as one you meant to fill in and didn't, and Signals reads it as match-all rather than flagging it. |
There was a problem hiding this comment.
What does this last bit mean after "Worth knowing..."?
|
|
||
| ## Seasonality and habit | ||
|
|
||
| A raw timestamp is close to unusable as a feature, since every value is unique. [Date parts](/docs/signals/attributes/attributes/#apply-a-date-part) reduce one to the part a model can learn from: hour of day, day of week, month of year, or the day, week, and month a user was active. |
| @@ -0,0 +1,39 @@ | |||
| --- | |||
| title: "New in Signals: attributes built for ML features" | |||
There was a problem hiding this comment.
Lets just call this "Recency, tenure, and time-of-day attributes"
What changed?
Adds a release note at
release-notes/new-in-signals-attributes-for-ml-features/announcing the three attribute-definition additions that came out of AISP-1451:time_since_last/time_since_firstaggregations (AISP-1446) — recency and tenure, ins/min/h/d, computed at read time againstderived_tstamp.date_partmodifier on timestamp properties (AISP-1448) — extract (hour_of_day,day_of_week,month_of_year) and truncate (active_day,active_week,active_month) families, applied before aggregation and also usable in criteria.eventslist means the attribute is calculated from every event type.The note is framed as a follow-on to New in Signals: ML training datasets: the dataset builder made attribute definitions the shared contract between training and serving, and these three additions widen what that contract can express.
Why?
The reference documentation for all three features shipped in #1909, but no release note went with it. Per
release-notes/_README.md, docs that catch up on functionality that shipped quietly still warrant a note, and this is the follow-up PR for that docs change.Reviewer guidance
The feature details were taken from the implementation in the Signals monorepo (the aggregation validators, the
DatePartliteral and its date-time property gating, and the relaxedeventsconstraint) and cross-checked against the reference docs added in #1909, so the two should agree.Two things worth a second opinion:
snowplow-signalsversion 0.4.8 or later. 0.4.8 is the first released version whoseAttributemodel carriestime_since_last/time_since_firstandtime_unit, hasdate_parton the property models, and dropsmin_lengthonevents— 0.4.7 hasdate_partonly. Verified by inspecting both wheels from PyPI.422. Worth confirming that's the right level of emphasis for a product-news audience.Checks run locally:
prettier --checkpasses, and a fulldocusaurus buildsucceeds with all three internal links resolving. Vale isn't installed locally, so it hasn't been run.AI reviews
Claude will automatically review this PR against the docs style guide.
If you have questions or want it to look again at something specific, tag
@claudein a comment.🤖 Generated with Claude Code