29ed22e476
Request: - Emphasize that the analyst model is for selling allocated IPO shares in T2 grey market or on D1, not for long-term holding. Changes: - Add explicit T2/D1 sell discipline to the analyst skill. - Update ipo_score_v0 targets and holding policy so D1 sell return is primary and T2 is the intended extension when reliable grey-market data exists. - Clarify that D5/D20/D60 are review labels only, not planned holding targets. - Update the model report, single-ticker report generator, README, and the 06106 report language to reflect the short-exit horizon. Verification: - Rebuilt the model report with the same dataset timestamp and confirmed the analysis dataset did not change. - Ran py_compile for build_analysis_dataset.py and generate_ipo_report.py. - Generated a 06106 dry-run report showing T2/D1 exit discipline. - Ran git diff --check. Next useful context: - T2 is still disabled in v0 until archivist approves a reliable grey-market data source; D1 remains the live modeled sell label.
164 lines
4.9 KiB
YAML
164 lines
4.9 KiB
YAML
version: ipo_score_v0
|
|
effective_date: 2026-06-15
|
|
status: initial_baseline
|
|
owner_skill: analyst
|
|
|
|
purpose: >
|
|
Build the first transparent Hong Kong IPO subscription scoring model from
|
|
archived project data. The model is a rules-plus-calibration baseline, not a
|
|
black-box predictor. It separates T0 prospectus information from T1 allotment
|
|
information so later facts do not leak into earlier decisions. It is designed
|
|
for short IPO subscription exits, not long-term holding.
|
|
|
|
targets:
|
|
primary: D1 sell return versus IPO offer price
|
|
secondary:
|
|
- T2 grey-market sell return versus IPO offer price, disabled until a reliable source exists
|
|
- D1 strong-return probability
|
|
|
|
holding_policy:
|
|
intended_exit_window:
|
|
- T2_grey_market when a reliable grey-market price is available
|
|
- D1 otherwise
|
|
default_assumption: sell allocated shares by D1
|
|
non_targets:
|
|
- D5 return
|
|
- D20 return
|
|
- D60 return
|
|
note: >
|
|
D5/D20/D60 outcomes are retained for review and error attribution only.
|
|
They do not define the subscription model's target holding period.
|
|
|
|
stage_policy:
|
|
T0_prospectus:
|
|
allowed_inputs:
|
|
- offer_price_hkd
|
|
- gross_proceeds_hkd_m
|
|
- funds_raised_hkd_m
|
|
- min_subscription_amount_hkd
|
|
- public_offer_pct_initial
|
|
- over_allotment_offer_shares
|
|
forbidden_inputs:
|
|
- allotment_results
|
|
- public_oversubscription_times
|
|
- international_oversubscription_times
|
|
- post_listing_price_performance
|
|
T1_allotment:
|
|
allowed_inputs:
|
|
- all_T0_inputs
|
|
- public_oversubscription_times
|
|
- international_oversubscription_times
|
|
- valid_applications
|
|
- successful_applications
|
|
- final_hk_offer_shares
|
|
- hk_offer_shares_initial
|
|
forbidden_inputs:
|
|
- grey_market_result
|
|
- post_listing_price_performance
|
|
T2_grey_market:
|
|
status: disabled_until_reliable_source_exists
|
|
note: >
|
|
T2 is excluded from v0 because no reproducible, redistribution-safe
|
|
grey-market data source has been approved.
|
|
|
|
score_components:
|
|
T0_prospectus:
|
|
offer_size_hkd_m:
|
|
source: gross_proceeds_hkd_m, falling back to funds_raised_hkd_m
|
|
points:
|
|
missing: 0
|
|
lt_300: -2
|
|
gte_300_lt_800: 1
|
|
gte_800_lt_2000: 4
|
|
gte_2000_lt_5000: 3
|
|
gte_5000: 2
|
|
public_offer_pct_initial:
|
|
points:
|
|
missing: 0
|
|
lte_0_05: 3
|
|
gt_0_05_lte_0_10: 1
|
|
gt_0_10: -1
|
|
min_subscription_amount_hkd:
|
|
points:
|
|
missing: -1
|
|
lt_3500: -1
|
|
gte_3500_lt_10000: 2
|
|
gte_10000: 1
|
|
offer_price_hkd:
|
|
points:
|
|
missing: 0
|
|
lt_1: -2
|
|
gte_1_lt_5: 0
|
|
gte_5_lt_30: 1
|
|
gte_30_lt_100: 2
|
|
gte_100: 1
|
|
over_allotment:
|
|
points:
|
|
present: 1
|
|
missing_or_zero: 0
|
|
|
|
T1_allotment:
|
|
public_oversubscription_times:
|
|
points:
|
|
missing: 0
|
|
lt_10: -4
|
|
gte_10_lt_100: -2
|
|
gte_100_lt_1000: 6
|
|
gte_1000_lt_5000: 13
|
|
gte_5000: 15
|
|
international_oversubscription_times:
|
|
points:
|
|
missing: 0
|
|
lt_1: -2
|
|
gte_1_lt_3: -1
|
|
gte_3_lt_10: 1
|
|
gte_10_lt_30: 6
|
|
gte_30: 8
|
|
valid_applications:
|
|
points:
|
|
missing: 0
|
|
lt_10000: -2
|
|
gte_50000_lt_100000: 1
|
|
gte_100000_lt_200000: 3
|
|
gte_200000: 5
|
|
application_success_rate:
|
|
definition: successful_applications / valid_applications
|
|
points:
|
|
missing: 0
|
|
lte_0_10: 4
|
|
gt_0_10_lte_0_30: 2
|
|
gt_0_80: -2
|
|
hk_offer_reallocation_multiple:
|
|
definition: final_hk_offer_shares / hk_offer_shares_initial
|
|
points:
|
|
missing: 0
|
|
gte_2_lt_3: 2
|
|
gte_3: 4
|
|
|
|
decision_bands:
|
|
T0_prospectus:
|
|
t0_score_lt_1: weak_or_avoid
|
|
t0_score_1_to_4: neutral
|
|
t0_score_5_to_7: positive_watch
|
|
t0_score_gte_8: strong_watch
|
|
T1_allotment:
|
|
total_score_lt_0: avoid
|
|
total_score_0_to_9: avoid_or_wait
|
|
total_score_10_to_17: watch_or_small
|
|
total_score_18_to_25: selective_subscribe
|
|
total_score_gte_26: high_conviction_subscribe
|
|
|
|
calibration_policy:
|
|
method: empirical_bucket_rate
|
|
primary_label: D1_return_pct > 0
|
|
strong_label: D1_return_pct >= 10
|
|
report_path: reports/2026-06-15_analysis_model_v0.md
|
|
dataset_path: data/snapshots/analysis_model_v0_dataset.csv
|
|
|
|
known_limitations:
|
|
- T0 has weaker discrimination than T1 because subscription demand is not available at prospectus stage.
|
|
- T1 is structurally complete for listed rows, but some individual demand fields remain null when the archived source does not explicitly state them.
|
|
- Industry labels and issuer fundamentals are not yet sufficiently structured for v0.
|
|
- T2 grey-market signal is intentionally disabled until a reliable source exists.
|
|
- Current D1 sell-return outcomes are from archived market data and should be reviewed for extreme corporate-action or data-vendor anomalies.
|