「精準抓出同族群連動」必須賦予不同的「權重(Weight)」與「比對邏輯」。
只靠一個欄位(如「概念」)會漏掉隱性標的,三個全上則會因為雜訊太多(例如「IC製造」太泛濫)導致成群效果變差。
以下是針對你的 Python 程式優化建議的三位一體比對法:
1. 欄位分工與建議權重
在程式邏輯中,你可以把這三個欄位看作「由廣到精」的篩選網:
| 欄位名稱 | 角色定位 | 程式作法建議 | 權重 (得分) |
| 族群概念 | 核心引擎 | 精確比對。這是人工整理過的「最熱標籤」,聯動性最強。 | 3 分 |
| 主要業務 | 補漏雷達 | 關鍵字包含比對。用來抓出概念欄位沒寫到的隱性產品(如:液冷、天線)。 | 1 分 |
| 產業別 | 最後防線 | 大分類過濾。用來確認兩間公司是否在同個大圈子(如:都是「通訊網路」)。 | 0.5 分 |
2. 建議的程式比對邏輯(Python 虛擬碼)
不要用 if A == B,改用 「計分制 (Scoring System)」。這樣你的「同群」就不會只有「是或不是」,而是有**「相關程度」**。
Python
def get_similarity_score(stock_a, stock_b):
score = 0
# 1. 概念比對 (Split 後做集合交集)
set_a = set(stock_a['concept'].split('/'))
set_b = set(stock_b['concept'].split('/'))
common_concepts = set_a.intersection(set_b)
score += len(common_concepts) * 3 # 每命中一個核心概念得 3 分
# 2. 業務關鍵字比對 (模糊匹配)
# 如果 A 的概念詞出現在 B 的業務內容裡
for concept in set_a:
if concept in stock_b['business']:
score += 1
# 3. 產業別一致性
if stock_a['industry'] == stock_b['industry']:
score += 0.5
return score, list(common_concepts)
3. 為什麼「三個都要」?(實戰案例)
拿 3/27 的數據來看:
只看「概念」:你可能只抓到
華通與燿華是「低軌衛星」。加上「業務」:你會發現
昇達科業務寫了「衛星天線」,牧德業務寫了「PCB 檢測」。結果:你的程式會自動把
華通(板)、昇達科(組件)、牧德(設備)串在一起。這就是**「產業鏈連動」**,這對你做「獲利最大化」非常有幫助,因為資金通常會從板廠流向設備。
4. 程式執行流程優化建議
預處理 (Preprocessing):
將這三個欄位合併成一個長字串
search_text。移除所有括號、空白字元。
標籤正規化:
使用我給你的
concept_mapping字典,先跑一遍取代。把「DRAM」跟「記憶體」統一成「記憶體」。
Top N 母體判定:
先取成交額前 50 檔。
雙向掃描:以 A 股票為中心,掃描剩餘 49 檔,計算分數。
門檻過濾:得分 > 3 分才顯示為「同群」。
🛡️ Zen 的實戰開發小提醒
在你的第二表(選股研究)中,當某個「概念」的 平均得分最高 且 族群內有一半以上收紅 時,這就是你當天要鎖定的 「主攻族群」。
這套作法能幫你避開「亞翔跌停,卻不知道要避開漢唐」這種產業資訊斷層的風險。
程式跑出來的結果
沒有留言:
張貼留言