這張工單在早上 9 點 14 分送進來,主旨寫著「bug??」,連客套話都省了。一位叫 Faisal 的讀者收藏了一輛 2020 年白色配米色內裝的 Nissan Patrol Platinum,兩天後卻發現有一則刊登看起來根本是同一輛車,只是換了不同的刊登編號、不同的賣家名稱,價格還便宜了 8,000 迪拉姆。他想知道我們的平台是不是把資料重複寫入了,因為如果真是這樣,他還怎麼相信任何定價數字。
問得很合理。這個星期我們手上有 73 個地區、1,375 個來源的 1,108,535 筆即時刊登,光是阿聯酋就有 59,393 筆,由 dubizzle.py 和 opensooq_uae_scraping_task.py 這類各自獨立運作的爬蟲負責抓取,分別對接完全不同的網站、完全不同的刊登格式。日產(Nissan)在我們系統裡全球共有 42,342 筆資料。而在這堆資料裡,竟然出現了兩輛在 Faisal 眼中根本是同一輛車、卻掛著兩個價牌的 Patrol。
咖啡都還沒煮好,我就把兩筆資料都調出來看了。同樣的年份、同樣的配備等級、同樣的外觀顏色,里程數只差了 11 公里——差距小到像是四捨五入造成的誤差,卻又不足以證明什麼。聯絡電話不同,不過 OpenSooq 上那支後來查出是僅限 WhatsApp 聯絡的商用帳號,這本身就是一個線索。刊登日期也不同,相差四天。還有一個 Faisal 沒提到的細節:比較便宜那則刊登的內裝照片裡,擋風玻璃上還貼著 UAE Pass 註冊貼紙,那正是車商在車主交接期間常常懶得撕掉的那種東西。
| OpenSooq 刊登 | Dubizzle 刊登 | |
|---|---|---|
| 價格 | 79,000 迪拉姆 | 87,000 迪拉姆 |
| 里程 | 61,200 公里 | 61,211 公里 |
| 刊登時間 | 第 1 天 | 第 5 天 |
| 聯絡方式 | WhatsApp 商用帳號 | 個人手機 |
| 是否可見註冊貼紙 | 是 | 否 |
這種組合——商用 WhatsApp 帳號、略高一點的價格、還有那種一看就知道是在車商場地而非誰家車道上拍的照片——正是「寄售轉手」的典型特徵。我的判斷是,而且我敢賭一把:某位車主在那週初把車賣給或寄售給了一位中間商,這位中間商四天後在第二個平台上以加價後的價格重新刊登,同時卻放任原本那則廣告繼續掛著直到自然到期,於是在這幾天重疊的時間裡,同一輛實體的 Patrol 就以兩個不同的價格同時出現在兩個地方。這在這個市場裡幾乎天天都在發生。這裡的路邊車商經常同時把庫存鋪在三、四個平台上,車一旦易主也不見得會馬上把舊刊登撤下來。
真正對這張工單有意義的部分在這裡:我們不會把這類刊登合併,以後也不會。我們的去重邏輯只在單一來源內部收斂重複項目——也就是同一個刊登編號在重新爬取時再度出現的情況——但刻意從不跨來源用 VIN 碼合併,即便我們相當確定那是同一輛車。在回覆 Faisal 之前,我特地對照了我們自己訂下的規則,因為很容易會覺得「這明明是同一輛車,當然該合併」。但兩個賣家掛著同一組 VIN,實質上就是兩位市場參與者各自開出兩個獨立報價,如果把它們當成重複項目處理,等於是悄悄從資料集裡刪掉其中一位賣家的價格訊號——而這正是那種會在不知不覺間侵蝕「低於市場價」模型準確度的事。我們每天大約標記 12,823 筆刊登為低於區域同類車輛行情的價格,而這個數字唯有在每一筆在售報價都留在資料池裡時才有意義,不管它看起來多麼像是重複刊登。
所以我如實告訴 Faisal:這不是系統錯誤,很可能是一次轉手,而他盯著看的那 8,000 迪拉姆價差不是雜訊——那正是他那週搜尋結果裡最明顯的一個「低於市場價」訊號,就明明白白攤在眼前。事實上,OpenSooq 那則刊登確實是當天被標記的優惠之一,價格低於杜拜和沙迦六輛同為 Platinum 配備等級的可比 Patrol 的開價。他在無意間撞見了一堂兩面性的教訓:看起來重複的刊登,通常只是刊登分佈上的小怪癖,而不是資料錯誤;而這對「疑似重複」的刊登裡,那個看起來「不對勁」的往往才是最值得優先打電話去問的那一個。
幾年前我在沙迦跟一位車商聊過,他把這件事講得比我寫在這裡還要直白:「車子才不管自己被貼在幾個網站上,價格才是真正會說話的。」他說得沒錯,而這句話基本上就是「絕不把兩個賣家合併成一筆資料」這整套邏輯的最佳註腳。
到了下午稍早,我在我們的常見問答裡加了一段關於「看似重複刊登」的說明,主要是希望下一位 Faisal 能立刻得到答案,而不必再花上一整天讓我們去查。但我沒有改動的,是去重規則本身——依然是同一來源、同一編號,僅此而已。兩個賣家、同一組 VIN,依然算作兩筆刊登。如果你哪天發現自己的夢想座駕好像被貼了兩次,別急著認定網站出了問題。先看看是誰開的價比較低,再問問為什麼。



