How it works
Understand the data and predictions
SecondChance reads the City of Austin's public intake and outcome records for the Austin Animal Center. It pairs each arrival with the outcome that closed it, counts the stays still open, and calculates waiting times and adoption statistics from what actually happened.
For each open cat or dog stay with a recorded date of birth, a model estimates two things from what was known at intake: the chance the stay runs past 60 days, and the chance of adoption by day 30. Nothing about the estimate updates as the stay continues.
Staff should read an estimate as a reason to look earlier and do more, then check the animal's current record before acting. Nothing here decides anything.
- Discrimination
0.694
Take two stays, one that ran past 60 days and one that did not. This is how often the model ranks them the right way round on data it never saw. 0.5 is chance.
- Calibration error
0.047
Average distance, in probability points, between a stated chance and what happened at that chance. Smaller means the percentage on screen means what it says.
- Lift in the top 50
5.57x
In the test block, the 50 highest-ranked stays contained long stays at this multiple of the base rate. Retrospective concentration, not an effect of using the tool.
- Evaluation period
30 May 2026 to 2 Sep 2026
Held-out arrivals, 3,079 stays, all later than anything used for training.
01Data and refresh
Data and refresh
SecondChance connects to the City of Austin's public intake and outcome records. Austin describes these feeds as updating hourly. SecondChance checks for updates automatically and recalculates the affected records and statistics when a refreshed snapshot is available. The data-status panel shows when information was last retrieved and whether the source appears delayed. Changes are not instantaneous, and an open intake record does not confirm that an animal is available for adoption.
Updated records can receive estimates from the current model. The model itself is updated separately after retraining and testing.
01
Austin publishes
Intake and outcome rows, hourly, on the open data portal.
02
SecondChance reads
Every row, validated and paired into stays, reused for thirty minutes.
03
Pages recalculate
Counts, rates and estimates from the same snapshot.
The path, end to end
- Austin's Socrata API is read in full, page by page, with a stable ordering so no row is skipped or repeated.
- Every row is validated against a schema; rejected rows are counted, never dropped silently.
- Each intake is paired with the outcome that names its intake time. Near misses are marked ambiguous and excluded from counts.
- Open stays, waits, medians, rates and outcome shares are computed from the paired stays as of one snapshot moment.
- Eligible open stays are scored by the published model, from intake-time inputs only.
- The finished view is cached for 30 minutes and served to every page. There is no push subscription; the site asks on this schedule.
Current snapshot 22 Sep 2026, 21:17 CDT. Publisher last wrote 22 Sep 2026, 19:00 CDT. Times on Austin's clock.
Source datasets
- Austin Animal Center Intakespyqf-r2dc · current ShelterBuddy feed, refreshed hourly, beginning 5 May 2025
- Austin Animal Center Outcomesgsvs-ypi7 · current ShelterBuddy feed, refreshed hourly, beginning 5 May 2025
- Austin Animal Center Intakes (1 Oct 2013 to 5 May 2025)wter-evkm · archive, frozen at the May 2025 cutover, used by the earlier study only
- Austin Animal Center Outcomes (1 Oct 2013 to 5 May 2025)9t4d-g238 · archive, frozen at the May 2025 cutover, used by the earlier study only
The archive and current feeds do not share an animal-ID namespace and are never joined by resemblance. Outcomes whose intake predates the cutover are counted as unmatched and shown in the data details.
02Metric guide
Metric guide
Every figure on the site has one definition, kept in a shared registry so the dashboard, the queue, a record page and this page cannot disagree. One sentence each; open an entry for the unit, formula, window, sample and limits.
Open shelter stays
Cat and dog intake episodes with no confidently matched recorded outcome as of the snapshot.
- Unit:
- stays
- Formula or cohort:
- Count of companion-animal intake rows whose intake is on or before the snapshot and which have no matched outcome on or before it. A repeat arrival is a new stay.
- Window:
- As of the snapshot time shown in the data details.
- Sample and exclusions:
- Wildlife and livestock are excluded. Ambiguous joins are excluded. Records open for more than a year are counted but flagged as possibly stale.
- Practical use:
- A rough size for the population that may need review.
- Limitation:
- Not verified adoption availability and not exact kennel occupancy: Austin publishes intake and outcome events, not a roster.
- Source:
- Derived from the two current ShelterBuddy feeds.
Days waiting
Whole days from this stay's intake to the snapshot, for an inferred open stay.
- Unit:
- days
- Formula or cohort:
- Snapshot time minus intake time, both read on Austin's clock, rounded down to whole days.
- Window:
- Intake to snapshot.
- Sample and exclusions:
- Open stays only.
- Practical use:
- Finding long waits.
- Limitation:
- A record the shelter never closed keeps accruing days; past a year it is flagged as possibly stale rather than trusted.
- Source:
- Intake `source_date` in the current feed; the snapshot time is this site's.
Median days to adoption
The middle wait among animals actually adopted in the cohort: about half waited less and half more.
- Unit:
- days
- Formula or cohort:
- Median of intake-to-adoption durations over adopted, confidently matched stays.
- Window:
- Stays that began in the trailing twelve months.
- Sample and exclusions:
- Adoptions only. Transfers, returns to owner, euthanasia and open stays are not in the sample.
- Practical use:
- Comparing observed adoption timelines across periods or groups.
- Limitation:
- It is not every animal's expected wait: animals still waiting and animals who left another way are not counted.
- Source:
- Current feeds; adoption variants are folded into one bucket.
Adopted within 30 days, observed
Eligible arrivals adopted by day 30, divided by arrivals that have had a full 30 days in which to be adopted.
- Unit:
- share of eligible arrivals
- Formula or cohort:
- Adopted with duration ≤ 30 days ÷ arrivals with at least 30 days between intake and the snapshot.
- Window:
- Arrivals in the trailing twelve months, excluding the most recent 30 days.
- Sample and exclusions:
- Arrivals too recent to have had 30 days are excluded, not counted as failures. Other exits within 30 days count as not adopted.
- Practical use:
- Historical early-adoption frequency.
- Limitation:
- A recent change in practice shows up only after 30 days have elapsed.
- Source:
- Current feeds.
Stays longer than 60 days, observed
Completed stays lasting more than 60 days, divided by completed stays.
- Unit:
- share of completed stays
- Formula or cohort:
- Completed stays with duration > 60 ÷ completed stays in the cohort.
- Window:
- Stays that began in the trailing twelve months.
- Sample and exclusions:
- Completed, confidently matched cat and dog stays, whatever the outcome.
- Practical use:
- How often long stays happened in completed history.
- Limitation:
- It is not the fraction of animals currently here who are past 60 days, and it is not a prediction.
- Source:
- Current feeds.
Predicted long-stay probability
The model's estimate, made from what was known at intake, that the total stay exceeds 60 days.
- Unit:
- probability
- Formula or cohort:
- Calibrated output of the long-stay model for the stay's intake-time inputs. Bands: 60% and above, 40%, 25%.
- Window:
- Answered at intake; not re-asked as the stay continues.
- Sample and exclusions:
- Cats and dogs with a recorded date of birth. Others show as unavailable.
- Practical use:
- Ranking which arrivals may deserve earlier attention.
- Limitation:
- A 70% estimate means roughly 70 of 100 comparable scored cases would pass 60 days if calibration holds. It is not certainty, temperament or an animal's value, and for an animal already past 60 days it is history, not a forecast.
- Source:
- Published model artifact; version and evaluation on the How it works page.
Predicted 30-day adoption probability
Estimated probability of adoption by day 30 counting from intake.
- Unit:
- probability
- Formula or cohort:
- Calibrated output of the 30-day adoption model for intake-time inputs.
- Window:
- Day 0 to day 30 from arrival.
- Sample and exclusions:
- Cats and dogs with a recorded date of birth.
- Practical use:
- A second view of the same arrival: fast exit rather than long stay.
- Limitation:
- Not "within the next 30 days" for an animal already here, and not one minus the long-stay probability.
- Source:
- Published model artifact.
Monthly intakes and adoptions
Separate counts of arrival events and adoption events in each month.
- Unit:
- events per month
- Formula or cohort:
- Intakes by intake month; adoptions by outcome month.
- Window:
- Every complete month in the current feeds; the current month is marked partial.
- Sample and exclusions:
- Cats and dogs, confident joins.
- Practical use:
- Seasonality and pressure.
- Limitation:
- The two lines involve different animals. Dividing them is not an adoption rate; the tile uses a cohort rate instead.
- Source:
- Current feeds.
Life-stage adoption median
Median days to adoption among adopted animals in each age group.
- Unit:
- days
- Formula or cohort:
- Median over adopted stays, grouped by life stage at intake.
- Window:
- Stays that began in the trailing twelve months.
- Sample and exclusions:
- The adopted count is shown beside each median; the completed count is the share's denominator.
- Practical use:
- Comparing observed timelines by age.
- Limitation:
- A short median among successful adoptions can coexist with a low adoption share: the two answer different questions.
- Source:
- Current feeds.
Sample size
The number of eligible stays or adoptions behind that specific figure.
- Unit:
- stays
- Formula or cohort:
- Count of rows contributing to the calculation, after exclusions.
- Window:
- Same as the figure it accompanies.
- Sample and exclusions:
- Stated as "based on … stays" or "… adoptions" where the distinction matters.
- Practical use:
- Judging how much to trust a figure.
- Limitation:
- A small sample can move sharply when a few records change.
- Source:
- Computed alongside each figure.
ROC AUC
How often the model ranks a randomly chosen positive case above a randomly chosen negative one.
- Unit:
- 0.5 to 1
- Formula or cohort:
- Area under the ROC curve on the held-out test block.
- Window:
- Held-out test arrivals, dates on the How it works page.
- Sample and exclusions:
- Stays with an observable outcome.
- Practical use:
- Ranking quality.
- Limitation:
- 0.694 does not mean 69.4% of predictions are correct.
- Source:
- Published model artifact.
Average precision
Summarises precision against recall as the selection threshold changes.
- Unit:
- 0 to 1
- Formula or cohort:
- Average precision (scikit-learn), not the trapezoidal precision–recall area. Compare with the event rate: a model with no skill scores about the base rate.
- Window:
- Held-out test block.
- Sample and exclusions:
- Same as ROC AUC.
- Practical use:
- How well the top of the ranking concentrates true cases when the event is rare.
- Limitation:
- False alarms and missed cases trade off; this is one summary of that trade.
- Source:
- Published model artifact.
Expected calibration error
The average gap between predicted and observed rates across probability groups, weighted by group size.
- Unit:
- probability points
- Formula or cohort:
- Ten equal-width bins; per-bin |observed − predicted| weighted by bin share.
- Window:
- Held-out test block, after calibration.
- Sample and exclusions:
- Same as ROC AUC.
- Practical use:
- Whether the printed percentages mean what they say.
- Limitation:
- 0.047 is about 4.7 percentage points on that evaluation, not a ±4.7-point interval on any one animal.
- Source:
- Published model artifact.
Calibration slope and intercept
A straight line fitted to observed rate against predicted rate across ten deciles; ideal is slope 1, intercept 0.
- Unit:
- unitless / probability points
- Formula or cohort:
- observed = intercept + slope × predicted, fitted by least squares on decile means. A slope below 1 means predictions are more spread than outcomes; a positive intercept means observed rates sit above predictions at the low end.
- Window:
- Held-out test block.
- Sample and exclusions:
- Same as ROC AUC.
- Practical use:
- Naming the shape of a calibration problem.
- Limitation:
- Neither value alone proves probabilities are trustworthy.
- Source:
- Published model artifact; the fit is on the untransformed probability scale.
Brier score
Average squared difference between predicted probabilities and binary outcomes.
- Unit:
- 0 (best) to 1
- Formula or cohort:
- mean((p − y)²).
- Window:
- Held-out test block.
- Sample and exclusions:
- Same as ROC AUC.
- Practical use:
- Overall probability quality; lower is better in a comparable population.
- Limitation:
- Reflects both ranking and calibration, and depends on the base rate.
- Source:
- Published model artifact.
Log loss
Probability error that penalises confident wrong predictions strongly.
- Unit:
- nats, lower is better
- Formula or cohort:
- −mean(y·ln p + (1−y)·ln(1−p)).
- Window:
- Held-out test block.
- Sample and exclusions:
- Same as ROC AUC.
- Practical use:
- Comparing models on the same evaluation problem.
- Limitation:
- Not a percentage or an adoption rate.
- Source:
- Published model artifact.
Precision in the top 50
Of the 50 highest-ranked evaluation cases, the share that actually had the outcome.
- Unit:
- share
- Formula or cohort:
- Positives among the top 50 by predicted probability ÷ 50.
- Window:
- Held-out test block.
- Sample and exclusions:
- The 50 highest scores in the block.
- Practical use:
- What a short worked list would have contained, historically.
- Limitation:
- Retrospective evaluation, not demonstrated outreach success on today's queue.
- Source:
- Published model artifact.
Lift in the top 50
The top-50 outcome rate divided by the evaluation base rate.
- Unit:
- multiple
- Formula or cohort:
- Precision in the top 50 ÷ overall positive rate in the block.
- Window:
- Held-out test block.
- Sample and exclusions:
- Same as precision in the top 50.
- Practical use:
- How concentrated the outcome is at the top of the ranking.
- Limitation:
- A lift of 5× describes concentration of the outcome. It does not mean 5× more adoptions caused by the tool, and today's queue is not guaranteed the same figure.
- Source:
- Published model artifact.
Subgroup calibration gap
Mean predicted rate minus observed rate within a group, in percentage points.
- Unit:
- percentage points
- Formula or cohort:
- mean(p) − mean(y) for the group's test rows.
- Window:
- Held-out test block.
- Sample and exclusions:
- Group sizes are shown beside each gap; small groups move easily.
- Practical use:
- Whether the model over- or under-states risk for a kind of animal.
- Limitation:
- Uncertainty is not estimated for small groups, so a small gap is not proof of fairness.
- Source:
- Published model artifact.
Feature importance
How much the model uses an input across the evaluated population.
- Unit:
- share of shown gain
- Formula or cohort:
- LightGBM gain importance, normalised over the inputs shown.
- Window:
- Training data.
- Sample and exclusions:
- Whole training population.
- Practical use:
- Which inputs the model leans on.
- Limitation:
- Not causation, not direction of effect, and not an explanation of any single animal.
- Source:
- Published model artifact.
Cumulative adoption incidence
The share estimated to have been adopted by a given day, accounting for competing exits.
- Unit:
- share
- Formula or cohort:
- Aalen–Johansen cumulative incidence with transfer, return and euthanasia as competing events.
- Window:
- Archive study, October 2013 to March 2022.
- Sample and exclusions:
- Legacy archive stays under the previous shelter system.
- Practical use:
- Historical context for how quickly groups were adopted.
- Limitation:
- Archived values describe that period; they are not current rates.
- Source:
- Earlier archive study.
Hazard ratio
The relative instantaneous adoption rate under a fitted survival model.
- Unit:
- multiple
- Formula or cohort:
- Cox proportional-hazards coefficient, exponentiated.
- Window:
- Archive study.
- Sample and exclusions:
- At-risk archive stays.
- Practical use:
- Historical association between a characteristic and adoption speed.
- Limitation:
- Not an adoption probability and not proof that an action changes outcomes.
- Source:
- Earlier archive study.
Estimated staff time
The sum of assumed task times for the actions in a plan.
- Unit:
- minutes
- Formula or cohort:
- Σ assumed minutes per assigned action.
- Window:
- This plan.
- Sample and exclusions:
- The rows in the plan.
- Practical use:
- Rough workload planning.
- Limitation:
- Coordination time, not the time to place an animal or complete care.
- Source:
- Assumptions in the intervention catalogue.
Scenario additional adoptions
A hypothetical count from explicit assumptions about benefit and eligible animals.
- Unit:
- animals
- Formula or cohort:
- Σ over eligible animals of min(assumed percentage-point increase, 100% − baseline), where baseline is the intake-time 30-day estimate if the window is still open and zero otherwise.
- Window:
- The 30-day horizon from intake, for animals still inside it; hypothetical for others.
- Sample and exclusions:
- Animals in the plan.
- Practical use:
- Sizing an assumption, not measuring an outcome.
- Limitation:
- Never achieved impact or a validated forecast.
- Source:
- Planner assumptions set by the user.
Data-quality labels
- Ambiguous pairing
- An outcome named an intake time that did not match exactly. The stay is excluded from every count rather than guessed at.
- Unmatched outcome
- An outcome with no intake in the current feed. Almost all are animals admitted before the May 2025 cutover, whose intake lives in the frozen archive under a different ID format.
- Possibly stale open record
- Open for more than a year. It may be a genuine long stay or a record never closed. Possibly stale is not proof the animal has left.
- Missing intake age
- No date of birth was recorded, so age at intake is unknown and the model declines to score the stay. Unknown is not zero.
- Unavailable prediction
- The model did not produce an estimate for this stay. The wait and record are still real and still shown.
03What the model predicts
What the model predicts
What it predicts
For every cat and dog currently in the shelter, the model estimates two things from what was known on arrival: the chance the animal is still there after 60 days, and the chance it is adopted within 30 days of intake. Nothing else. It does not decide anything, and it does not rank animals by how much they deserve care.
What it learned from
Completed shelter stays from Austin's current public feeds, which begin in May 2025 when the city moved to the ShelterBuddy system. It uses only what is known when an animal arrives: species, breed, colour, age, sex, why it came in, its health at intake, and how full the shelter was that day.
What the estimate is, and is not
- It is answered at intake and not re-asked as the stay continues. For an animal already past 60 days, the site leads with that fact and keeps the intake estimate as context.
- The 30-day figure is adoption by day 30 counting from arrival, not within the next 30 days from today.
- The two figures are separate models, not one minus the other.
- A 70% long-stay estimate means roughly 70 in 100 comparable scored arrivals would pass 60 days if the calibration holds. It is not certainty, temperament, or an animal's worth.
What it keys on: stay past 60 days
- Age when it arrived37% of the shown weight
- Breed: American pit bull terrier14% of the shown weight
- Recorded as: Dog12% of the shown weight
- Sex: Unknown10% of the shown weight
- How full the shelter was that day9% of the shown weight
- Breed: Chihuahua, smooth coat8% of the shown weight
- How busy the previous week had been5% of the shown weight
- Time of day it arrived5% of the shown weight
Bar length is how much the model relies on each input across the whole population, largest first. It is not an explanation of any single animal, and it does not say which direction an input pushes a prediction.
Show the 30-day adoption model's inputs
- Age when it arrived66% of the shown weight
- Sex: Unknown13% of the shown weight
- Reason it came in: animal control impound6% of the shown weight
- Reason it came in: Owner surrender5% of the shown weight
- Breed: American pit bull terrier3% of the shown weight
- How full the shelter was that day2% of the shown weight
- Species: Dog2% of the shown weight
- Recorded as: Cat2% of the shown weight
Bar length is how much the model relies on each input across the whole population, largest first. It is not an explanation of any single animal, and it does not say which direction an input pushes a prediction.
04How it was tested
How it was tested
On stays the model never saw, from a later period than the ones it learned from. Testing on a later window is deliberate. A model checked only against its own era tells you nothing about how it behaves once the shelter changes.
Measured on the held-out test block after calibration. Discrimination is the ability to rank a long stay above a short one. Calibration error is how far a stated percentage is from what actually happened.
| Measure | Stay past 60 days | Adopted by day 30 |
|---|---|---|
| Stays evaluatedStays in the held-out block with an observable outcome. None were seen during training. | 3,079 | 3,217 |
| How often it actually happenedThe base rate. Any model has to beat this to be worth anything, and average precision should be read against it. | 6.5% | 33.5% |
| Discrimination (ROC AUC)How often the model ranks a randomly chosen positive case above a randomly chosen negative one. 0.5 is chance; 0.694 is not 69.4% accuracy. | 0.694 | 0.803 |
| Average precisionPrecision against recall as the threshold moves, summarised as average precision (not trapezoidal PR area). Compare it with the base rate above: that is roughly what no skill would score. It asks a different question from ROC AUC — how concentrated true cases are at the top — rather than the same question asked honestly. | 0.157 | 0.605 |
| Calibration error (ECE)Weighted average gap between predicted and observed rates across ten probability bins. 0.047 is about 4.7 percentage points on this evaluation, not a ±4.7-point interval on any single animal. | 0.047 | 0.062 |
| Calibration slopeSlope of observed rate against predicted rate across deciles; 1.0 is ideal. Below 1 the predictions are more spread out than the outcomes (too confident at the extremes); above 1, less spread. | 0.640 | 1.198 |
| Calibration interceptWhere that line crosses zero predicted probability; 0 is ideal. Under this fit (observed = intercept + slope × predicted), a positive intercept means observed rates sit above predictions at the low end, so predictions there are too low, not too high. Read with the slope, not alone. | −0.64 pp | +0.27 pp |
| Brier scoreAverage squared error of the probabilities. Lower is better in a comparable population; it reflects ranking as well as calibration. | 0.061 | 0.175 |
| Log lossPenalises confident mistakes hardest. Lower is better on the same problem. Not a percentage. | 0.237 | 0.502 |
| Precision in the top 50Of the 50 highest-ranked stays in the evaluation block, the share the outcome actually happened to (36% is 18 of 50). Historical evaluation, not demonstrated outreach success. | 36.0% | 80.0% |
| Lift in the top 50That precision divided by the base rate. It describes how concentrated the outcome is at the top of the ranking; it does not mean the tool causes that many more adoptions. | 5.57x | 2.39x |
Calibration: how the percentages were fitted
The raw model ranks well but its probabilities are not trustworthy on their own. An isotonic mapping is fitted on the validation block and applied to everything shown on this site. The validation figures below are the mapping's fit on the data it was fitted to, so a near-zero calibration error there is expected and is not evidence. The test figures above are the honest ones.
- Long stay, validation AUC (fitted set)
- 0.709
- Long stay, validation ECE (fitted set)
- 0.000
- 30-day adoption, validation AUC (fitted set)
- 0.806
- 30-day adoption, validation ECE (fitted set)
- 0.000
A reliability curve is not drawn because the artifact does not carry per-bin counts, and a curve interpolated from summary statistics would be a drawing rather than a measurement.
05Who it works for
Who it works for
A model that works well on average can still work badly for a particular group of animals, and that is exactly the failure that matters here. Performance is reported by species, life stage, intake condition, breed structure and coat colour rather than summarised away. Uncertainty is not estimated for small groups, so a small gap is not proof of fairness and a large one in a group of 32 is not proof of a problem.
| Flag | ||||||
|---|---|---|---|---|---|---|
| Breed structure | Single breed | 3,079 | 6.5% | 0.694 | +4.6 pp | Over-predicts by +4.6 pp |
| Coat colour | Black in coat | 915 | 6.9% | 0.688 | +4.8 pp | Over-predicts by +4.8 pp |
| Coat colour | No black in coat | 2,164 | 6.3% | 0.692 | +4.6 pp | Over-predicts by +4.6 pp |
| Intake condition | Dead | 32 | 15.6% | 0.741 | −7.9 pp | Small group (32); uncertainty not estimated |
| Intake condition | Injured | 75 | 16.0% | 0.550 | −1.2 pp | Small group (75); uncertainty not estimated |
| Intake condition | Neonate | 59 | 0.0% | not measured | +6.1 pp | Small group (59); uncertainty not estimated |
| Intake condition | Normal | 251 | 10.8% | 0.647 | +2.1 pp | Within 4 points |
| Intake condition | Sick | 56 | 10.7% | 0.737 | +0.3 pp | Small group (56); uncertainty not estimated |
| Intake condition | Missing | 2,606 | 5.7% | 0.691 | +5.2 pp | Over-predicts by +5.2 pp |
| Life stage | Adult | 1,020 | 7.1% | 0.789 | +7.5 pp | Over-predicts by +7.5 pp |
| Life stage | Juvenile | 1,745 | 6.0% | 0.637 | +3.6 pp | Within 4 points |
| Life stage | Senior | 124 | 6.5% | 0.787 | +5.5 pp | Over-predicts by +5.5 pp |
| Life stage | Unknown | 190 | 7.9% | 0.717 | −1.7 pp | Within 4 points |
| Species | Cat | 2,096 | 5.3% | 0.646 | +2.9 pp | Within 4 points |
| Species | Dog | 983 | 8.9% | 0.758 | +8.3 pp | Over-predicts by +8.3 pp |
A known population issue
The evaluation set includes stays recorded with an intake condition of “Dead”, animals that arrived deceased. They are not candidates for adoption support, and their presence in training and evaluation is a known limitation of this model version. Removing them requires a documented retrain and re-evaluation; the metrics above are reported as published rather than adjusted after the fact. In this artifact 32 test stays carry that condition, with an observed long-stay rate of 15.6%, which points to records left open rather than animals waiting.
06Limitations
Limitations
Where it should not be trusted
It knows nothing about behaviour, temperament, photographs or listing quality, which are among the strongest reasons an animal waits. It was trained on one shelter in one city. It should not be pointed at another shelter without retraining and rechecking there.
When it stops working
A model can keep its ranking and lose its meaning. In the archive study the shelter's operations changed sharply in March 2020: the model kept telling fast adoptions from slow ones about as well as before, but its probabilities drifted until it was predicting a 30-day adoption rate twelve points above what actually happened.
That is the failure mode worth understanding, because a dashboard showing probabilities will keep showing confident, wrong numbers the whole time. Monitoring only the ranking metric would have missed it entirely, which is why calibration error is reported next to discrimination here rather than buried.
What that looks like in this model today
Long-stay discrimination on the held-out block is 0.694 and its calibration error is 0.047. A long stay happened to 6.5% of the block, so the ranking is doing real work on a rare outcome. If the calibration error climbs while discrimination holds, the ranking is still usable and the printed percentages are not.
What it must not be used for
SecondChance estimates how long an animal is likely to wait so that staff attention, foster recruitment, photography and outreach can go to the animals who need them most.
A high predicted long-stay risk is a request for more help, not less. This score must never be used to justify euthanasia, to refuse an intake, to withhold medical or behavioural care, or to deprioritise any animal for any resource. Every prediction in this system exists to increase what an animal receives.
If you are being asked to use this tool to reduce care for an animal, the tool is being misused. Say so.
07Technical lineage
Technical lineage
Every value in this panel is read from the published model artifact. Nothing on this page is typed in by hand.
- Model version
- sc-sb-2026-09-02-v1
- Trained at
- 2 Sep 2026, 16:14 CDT
- Source system
- ShelterBuddy, via the City of Austin
- Source datasets
- pyqf-r2dc, gsvs-ypi7
- Source rows read
- 16,993 intakes, 16,825 outcomes
- Source retrieved
- 2 Sep 2026, 16:14 CDT
- Feature transform
- sb-features-1
- Random seed
- 20260902
- Training block
- 4 May 2025 to 1 Mar 2026 · 9,153 stays
- Validation block
- 1 Mar 2026 to 30 May 2026 · 3,152 stays
- Test block
- 30 May 2026 to 2 Sep 2026 · 3,079 stays
- Inputs used
- 69 features, all known at intake
- Learner
- LightGBM gradient-boosted trees, isotonic calibration on the validation block
- Runtime
- Committed JSON tree dump, evaluated in TypeScript; golden vectors keep it in step with the Python trainer
The earlier archive study
An earlier version of this project studied the full Austin archive from October 2013 to March 2022, under the previous shelter system. Those results are kept because the methodology and its findings still stand, but that model is not the one scoring this site: the source system, schema and operating period all changed in May 2025, and applying it to the current feed would be unsound.
Archive-era findings that still appear on this site (foster pathways, intake condition, the senior band) are labelled as historical associations from 2013–2022 wherever they are used. They describe that period, not current rates, and they do not measure what an action changes.

