Skip to content

Commit af63ac9

Browse files
author
Liju M Jose
committed
Changes to propensity based on feedback
1 parent 6942a5d commit af63ac9

2 files changed

Lines changed: 39 additions & 39 deletions

File tree

src/pages/docs/release-notes/upcoming-releases.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,9 @@ Partners can now identify at-risk customers and high-growth opportunities using
2727
| No changes needed for existing fields | `productRecommendations` and `overlayRecommendations` are unchanged. Existing integrations continue to work without modification. |
2828

2929
For more information, see [Propensity Intelligence](../recommendations/index.md#propensity-intelligence).
30+
31+
### Testing Propensity Signals in sandbox
32+
33+
A set of 13 predefined test seeds is configured in the Sandbox so you can exercise every combination of rating level and empty-array behavior during integration testing. Each seed returns a fixed response.
34+
35+
For more information, see [Testing Propensity Signals in sandbox](../../sandbox/sandbox-portal/recommendations/index.md#testing-propensity-signals-in-sandbox).

src/pages/sandbox/sandbox-portal/recommendations/index.md

Lines changed: 33 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,40 +22,34 @@ Specific, hardcoded recommendations have been configured to facilitate integrati
2222

2323
## Testing Propensity Signals in Sandbox
2424

25-
In addition to product recommendations, the Sandbox returns agent-driven propensity signals under the `propensity` object for the [Fetch Recommendations API](../../../docs/recommendations/apis.md#fetch-recommendations). Request them using the `signals` parameter (`"signals": ["churn", "seatExpansion"]`); when omitted, all available signals are returned.
25+
In addition to product recommendations, the Sandbox returns agent-driven propensity signals under the `propensity` object for the [Fetch Recommendations API](../../../docs/recommendations/apis.md#fetch-recommendations). You can request these signals using the `includePropensity: true` request parameter.
2626

2727
Each signal type (`churn`, `seatExpansion`) is returned as an array of prediction objects. Every prediction shares a common shape — `category`, `probability`, `refreshDate`, `reasons`, and `additionalDetails`. The `category` field indicates the scope of the prediction; the Sandbox seeds currently use `"allOfferings"`.
2828

29-
A set of 13 predefined test seeds is configured in the Sandbox so you can exercise every combination of rating level and empty-array behavior during integration testing. Each seed returns a fixed response, so results are deterministic and repeatable.
29+
**Note:**
3030

31-
### How probabilities are mapped
32-
33-
Each model produces a percentile score (0–100) that is mapped to a `HIGH` / `MEDIUM` / `LOW` rating using the following thresholds:
34-
35-
| Signal | HIGH | MEDIUM | LOW |
36-
|---|---|---|---|
37-
| churn | ≥ 95.0 | ≥ 91.0 | < 91.0 |
38-
| seatExpansion | ≥ 91.0 | ≥ 81.0 | < 81.0 |
39-
40-
**Note:** The churn model is bimodal — only scores ≥ 91 qualify as `MEDIUM` or above. The `refreshDate` is the score date normalized to start-of-day UTC (for example, `2026-05-14` becomes `2026-05-14T00:00:00Z`). Seeds use `score_date = 2026-05-14` throughout.
31+
- A set of 13 predefined test seeds is configured in the Sandbox so you can exercise every combination of rating level and empty-array behavior during integration testing. Each seed returns a fixed response, so results are deterministic and repeatable.
32+
- Each customer is assigned one of the seeded responses randomly for testing. Once assigned, the seeded response does not change.
4133

4234
### Available test seeds
4335

36+
Each model produces a percentile score (0–100) that is mapped to a `HIGH` / `MEDIUM` / `LOW` rating
37+
4438
| Index | Scenario | Churn | Seat Expansion |
4539
|---|---|---|---|
46-
| 0 | Both HIGH | **HIGH** | **HIGH** |
47-
| 1 | Churn HIGH + Expansion LOW | **HIGH** | LOW |
48-
| 2 | Churn LOW + Expansion HIGH | LOW | **HIGH** |
49-
| 3 | Both MEDIUM | **MEDIUM** | **MEDIUM** |
50-
| 4 | Both LOW | LOW | LOW |
51-
| 5 | Churn only HIGH | **HIGH** | — (empty array) |
52-
| 6 | Expansion only HIGH | — (empty array) | **HIGH** |
53-
| 7 | Churn MEDIUM + Expansion HIGH | **MEDIUM** | **HIGH** |
54-
| 8 | Churn HIGH + Expansion MEDIUM | **HIGH** | **MEDIUM** |
55-
| 9 | Both HIGH, large enterprise | **HIGH** | **HIGH** |
56-
| 10 | Churn only MEDIUM | **MEDIUM** | — (empty array) |
57-
| 11 | Expansion only LOW | — (empty array) | LOW |
58-
| 12 | Both HIGH, Acrobat + CC activity | **HIGH** | **HIGH** |
40+
| 1 | Both HIGH | **HIGH** | **HIGH** |
41+
| 2 | Churn HIGH + Expansion LOW | **HIGH** | LOW |
42+
| 3 | Churn LOW + Expansion HIGH | LOW | **HIGH** |
43+
| 4 | Both MEDIUM | **MEDIUM** | **MEDIUM** |
44+
| 5 | Both LOW | LOW | LOW |
45+
| 6 | Churn only HIGH | **HIGH** | — (empty array) |
46+
| 7 | Expansion only HIGH | — (empty array) | **HIGH** |
47+
| 8 | Churn MEDIUM + Expansion HIGH | **MEDIUM** | **HIGH** |
48+
| 9 | Churn HIGH + Expansion MEDIUM | **HIGH** | **MEDIUM** |
49+
| 10 | Both HIGH, large enterprise | **HIGH** | **HIGH** |
50+
| 11 | Churn only MEDIUM | **MEDIUM** | — (empty array) |
51+
| 12 | Expansion only LOW | — (empty array) | LOW |
52+
| 13 | Both HIGH, Acrobat + CC activity | **HIGH** | **HIGH** |
5953

6054
### Empty and unavailable signals
6155

@@ -65,13 +59,13 @@ Each model produces a percentile score (0–100) that is mapped to a `HIGH` / `M
6559
| No seat expansion data for the customer | `"seatExpansion": []` |
6660
| Neither signal available | `"propensity": { "churn": [], "seatExpansion": [] }` |
6761

68-
**Note:** `predictedAddonSize` (inside `additionalDetails` on a `seatExpansion` prediction) is only serialized when a prediction is available. When no prediction exists, the key is omitted from `additionalDetails` entirely — treat a missing key as "no prediction available."
62+
**Note:** `predictedAddonSize` inside `additionalDetails` on a `seatExpansion` predictio is serializedonly when a prediction is available. When no prediction exists, the key is omitted entirely from `additionalDetails`. Treat a missing key as "no prediction available."
6963

7064
### Seed-by-seed API output
7165

7266
The following examples show the `propensity` node of the response for each seed.
7367

74-
#### Index 0 — Both HIGH
68+
#### Index 1 — Both HIGH
7569

7670
Churn **HIGH** · Seat Expansion **HIGH** (`predictedAddonSize` = 8)
7771

@@ -107,7 +101,7 @@ Churn **HIGH** · Seat Expansion **HIGH** (`predictedAddonSize` = 8)
107101
}
108102
```
109103

110-
#### Index 1 — Churn HIGH + Expansion LOW
104+
#### Index 2 — Churn HIGH + Expansion LOW
111105

112106
Churn **HIGH** · Seat Expansion **LOW** (`predictedAddonSize` = 2)
113107

@@ -140,7 +134,7 @@ Churn **HIGH** · Seat Expansion **LOW** (`predictedAddonSize` = 2)
140134
}
141135
```
142136

143-
#### Index 2 — Churn LOW + Expansion HIGH
137+
#### Index 3 — Churn LOW + Expansion HIGH
144138

145139
Churn **LOW** · Seat Expansion **HIGH** (`predictedAddonSize` = 6)
146140

@@ -174,7 +168,7 @@ Churn **LOW** · Seat Expansion **HIGH** (`predictedAddonSize` = 6)
174168
}
175169
```
176170

177-
#### Index 3 — Both MEDIUM
171+
#### Index 4 — Both MEDIUM
178172

179173
Churn **MEDIUM** · Seat Expansion **MEDIUM** (`predictedAddonSize` = 3)
180174

@@ -207,7 +201,7 @@ Churn **MEDIUM** · Seat Expansion **MEDIUM** (`predictedAddonSize` = 3)
207201
}
208202
```
209203

210-
#### Index 4 — Both LOW
204+
#### Index 5 — Both LOW
211205

212206
Churn **LOW** · Seat Expansion **LOW** (`predictedAddonSize` = 1)
213207

@@ -239,7 +233,7 @@ Churn **LOW** · Seat Expansion **LOW** (`predictedAddonSize` = 1)
239233
}
240234
```
241235

242-
#### Index 5 — Churn only HIGH
236+
#### Index 6 — Churn only HIGH
243237

244238
Churn **HIGH** · Seat Expansion: no data → empty array
245239

@@ -262,7 +256,7 @@ Churn **HIGH** · Seat Expansion: no data → empty array
262256
}
263257
```
264258

265-
#### Index 6 — Expansion only HIGH
259+
#### Index 7 — Expansion only HIGH
266260

267261
Churn: no data → empty array · Seat Expansion **HIGH** (`predictedAddonSize` = 10)
268262

@@ -286,7 +280,7 @@ Churn: no data → empty array · Seat Expansion **HIGH** (`predictedAddonSize`
286280
}
287281
```
288282

289-
#### Index 7 — Churn MEDIUM + Expansion HIGH
283+
#### Index 8 — Churn MEDIUM + Expansion HIGH
290284

291285
Churn **MEDIUM** · Seat Expansion **HIGH** (`predictedAddonSize` = 7)
292286

@@ -320,7 +314,7 @@ Churn **MEDIUM** · Seat Expansion **HIGH** (`predictedAddonSize` = 7)
320314
}
321315
```
322316

323-
#### Index 8 — Churn HIGH + Expansion MEDIUM
317+
#### Index 9 — Churn HIGH + Expansion MEDIUM
324318

325319
Churn **HIGH** · Seat Expansion **MEDIUM** (`predictedAddonSize` = 3)
326320

@@ -354,7 +348,7 @@ Churn **HIGH** · Seat Expansion **MEDIUM** (`predictedAddonSize` = 3)
354348
}
355349
```
356350

357-
#### Index 9 — Both HIGH, large enterprise
351+
#### Index 10 — Both HIGH, large enterprise
358352

359353
Churn **HIGH** · Seat Expansion **HIGH** (`predictedAddonSize` = 15)
360354

@@ -390,7 +384,7 @@ Churn **HIGH** · Seat Expansion **HIGH** (`predictedAddonSize` = 15)
390384
}
391385
```
392386

393-
#### Index 10 — Churn only MEDIUM
387+
#### Index 11 — Churn only MEDIUM
394388

395389
Churn **MEDIUM** · Seat Expansion: no data → empty array
396390

@@ -412,7 +406,7 @@ Churn **MEDIUM** · Seat Expansion: no data → empty array
412406
}
413407
```
414408

415-
#### Index 11 — Expansion only LOW
409+
#### Index 12 — Expansion only LOW
416410

417411
Churn: no data → empty array · Seat Expansion **LOW** (`predictedAddonSize` = 1)
418412

@@ -433,7 +427,7 @@ Churn: no data → empty array · Seat Expansion **LOW** (`predictedAddonSize` =
433427
}
434428
```
435429

436-
#### Index 12 — Both HIGH, Acrobat + CC activity
430+
#### Index 13 — Both HIGH, Acrobat + CC activity
437431

438432
Churn **HIGH** · Seat Expansion **HIGH** (`predictedAddonSize` = 5)
439433

0 commit comments

Comments
 (0)