fix(growth): require a 1000-view baseline on the rate board
Keep small-base videos on the delta board only, and raise the smoothing prior to 1000 so videos that just clear the floor do not dominate the ranking.
This commit is contained in:
1 parent
39a6537f67
commit
00572a3429
11 files changed
+47
-27
No files matched your search
+17
-10
@@ -492,7 +492,7 @@ def test_about_payload():
|
||||
"video_shrink_minutes": 60,
|
||||
"shrink_minutes": None,
|
||||
"home_growth_days": "auto",
|
||||
"growth_rate_prior": 500,
|
||||
"growth_rate_prior": 1000,
|
||||
}
|
||||
assert about["heat_weights"]["view"] == 0.30
|
||||
assert about["followers"]["videos_total"] == 3
|
||||
@@ -758,8 +758,8 @@ def test_same_day_growth_baselines():
|
||||
|
||||
rate = q.list_videos(sort="growth_rate", growth_days=1, page_size=20)
|
||||
rate_aids = {item["aid"] for item in rate["items"]}
|
||||
assert 103 not in rate_aids
|
||||
assert 101 in rate_aids and 105 in rate_aids
|
||||
assert 103 not in rate_aids and 105 not in rate_aids
|
||||
assert 101 in rate_aids
|
||||
|
||||
seven = q.list_videos(sort="growth", growth_days=7)
|
||||
seven_aids = {item["aid"] for item in seven["items"]}
|
||||
@@ -782,7 +782,7 @@ def test_same_day_growth_baselines():
|
||||
|
||||
|
||||
def test_growth_rate_sort_uses_prior():
|
||||
"""小基数的真实增速可以更高,排序分用基线 + prior,不按 raw rate 排。"""
|
||||
"""基线不足 1000 不进增速榜;达标后按基线 + prior 排序,不按 raw rate。"""
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
db, q = setup(tmp)
|
||||
try:
|
||||
@@ -791,7 +791,9 @@ def test_growth_rate_sort_uses_prior():
|
||||
previous_day = DATES[-2]
|
||||
start = int(day_bounds(latest)[0])
|
||||
pub = int(day_bounds("2026-09-01")[0])
|
||||
for aid, views in ((301, (80, 512)), (302, (2000, 4000))):
|
||||
# 301:80→512,真实 +540%,基线低于 1000,只留在增量榜。
|
||||
# 304:1000→2500,真实增速高于 302,平滑后应排在 302 后面。
|
||||
for aid, views in ((301, (80, 512)), (302, (5000, 10000)), (304, (1000, 2500))):
|
||||
repo.upsert_from_fav(
|
||||
resource(aid, up_mid=1, up_name="UP A", pubdate=pub),
|
||||
FOLDER.media_id, was_added=True, now=start,
|
||||
@@ -807,11 +809,16 @@ def test_growth_rate_sort_uses_prior():
|
||||
DASHBOARD_CACHE.clear()
|
||||
ranked = q.list_videos(sort="growth_rate", growth_days=1, page_size=20)
|
||||
order = [item["aid"] for item in ranked["items"]]
|
||||
assert ranked["growth_rate_prior"] == 500
|
||||
assert order.index(302) < order.index(301)
|
||||
small = next(item for item in ranked["items"] if item["aid"] == 301)
|
||||
assert abs(small["growth"]["rate"] - 432 / 80) < 1e-12
|
||||
assert small["growth"]["delta"] == 432
|
||||
assert ranked["growth_rate_prior"] == 1000
|
||||
assert 301 not in order
|
||||
assert order.index(302) < order.index(304)
|
||||
modest = next(item for item in ranked["items"] if item["aid"] == 304)
|
||||
assert abs(modest["growth"]["rate"] - 1500 / 1000) < 1e-12
|
||||
|
||||
growth = q.list_videos(sort="growth", growth_days=1, page_size=20)
|
||||
grown = next(item for item in growth["items"] if item["aid"] == 301)
|
||||
assert grown["growth"]["delta"] == 432
|
||||
assert abs(grown["growth"]["rate"] - 432 / 80) < 1e-12
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
Reference in new issue
Block a user