When a feature is not weak but inverted
"Absorption" is the idea that an operator is quietly soaking up supply - so a stock showing many absorption events is being accumulated, and should be closer to firing.
It is a good story. We measured it, and the story runs backwards.
The ranking test
Rank every liquid stock-session by its absorption count over the prior 30 sessions, then ask how well that ranking separates the sessions that lock next from the ones that do not. That is an AUC. 0.5000 is a coin flip. Above 0.5 the feature helps. Below 0.5 the feature points the wrong way.
Absorption AUC = 0.4622 on 668,811 liquid stock-sessions, 22,878 of which locked.
That is not "weak". A weak feature sits at 0.50 and tells you nothing. This one sits below the coin flip, which means the ranking carries real information pointing in the opposite direction to the story.
The same finding without the statistics
An AUC is easy to wave away, so here is the plain version. Split liquid stocks by how many absorptions they showed in the prior 30 sessions, and measure how often each group locked in the next session:
| absorptions in the prior 30 sessions | next-session lock rate | n |
|---|---|---|
| none at all | 3.998% | 156,196 |
| eight or more | 2.368% | 21,963 |
The stocks showing the most absorption locked least. The base rate on this same definition is 3.421%, so the heavily-absorbed group is running well below the market's own average rather than above it.
Why we did not quietly delete it
Because an inverted feature is more dangerous than a useless one, and because you are almost certainly being sold this exact story somewhere. A feature at 0.50 costs you nothing. A feature at 0.4622 that you believe in actively steers you toward the wrong names - you would be systematically picking the group with the lower rate while feeling well informed.
Evidence - History - Confidence - Counterargument
History - this was not always known here. Absorption sat inside scoring on the strength of the story, and the story was never tested against the panel until it was. That is the failure worth learning from: a plausible mechanism is not evidence.
Confidence - high on the direction, moderate on the size. The sample is large, and the AUC and the bucket table are two different tests that agree.
Counterargument - the strongest case against this lesson is that absorption may be real but slow: it might predict a move over months while we scored it against the very next session. That is a genuine limitation of this measurement rather than a rescue of the feature - it means "absorption implies an imminent circuit" is refuted, while "absorption implies something eventually" is simply untested here.
Evidence - where every number came from
Every figure in this lesson is listed below with its definition, its sample size, its window and the exact query that produced it, so you can re-run it rather than take our word for it.
absorption_auc = 0.4622 (n = 668,811)
- what it is: how well the absorption count ranks the sessions that lock next. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- note: 0.5 is a coin flip. Below 0.5 the feature is anti-predictive.
- how it was computed (pandas over the panel, not SQL):
``text AUC of panel column absorptions_30 against locked_next, over rows with avg_vol_90 >= 10000. AUC 0.5 = coin flip; BELOW 0.5 = the feature points the WRONG WAY. ``
absorption_locks_n = 22,878 (n = 668,811)
- what it is: locking sessions inside the AUC sample
- window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text AUC of panel column absorptions_30 against locked_next, over rows with avg_vol_90 >= 10000. AUC 0.5 = coin flip; BELOW 0.5 = the feature points the WRONG WAY. ``
absorb0_lock = 3.998% (n = 156,196)
- what it is: next-session lock rate for liquid stocks with ZERO absorptions in the prior 30 sessions. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY absorption bucket, 100*AVG(locked_next), over liquid rows. Buckets: 0 absorptions vs 8 or more in the prior 30 sessions. ``
absorb8_lock = 2.368% (n = 21,963)
- what it is: next-session lock rate for liquid stocks with EIGHT OR MORE absorptions in the prior 30 sessions. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY absorption bucket, 100*AVG(locked_next), over liquid rows. Buckets: 0 absorptions vs 8 or more in the prior 30 sessions. ``
phase_base = 3.421% (n = 668,811)
- what it is: the base rate every phase lift below is measured against. research panel column
locked_next- a threshold flag, NOT the cap rule. Its liquid base rate is ~3.42%, not ~0.98%. Never compare a number computed on this flag with one computed on the cap rule. - window: 2016-01-01..2026-07-30
- source: zeme_uat_panel.parquet
- how it was computed (pandas over the panel, not SQL):
``text GROUP BY camp_phase over liquid panel rows: 100*AVG(locked_next) per phase, and the same figure over all phases as the base rate. ``
ZEME Academy is educational analysis of Pakistan Stock Exchange data. It is not investment advice, not a recommendation, and not a solicitation to trade. Every number here is measured history, and history is not a forecast. ZEME is not SECP-registered.