过去几周我同时在做两个相关的项目。第一个是复现 2024 年 Scientific Reports 上 Lee 等人的论文 “Social signals predict contemporary art prices better than visual features, particularly in emerging markets”。这篇论文用 590 位在世艺术家的 34,200 条拍卖记录训练了一个 XGBoost 模型。第二个是构建 Art Evaluator,一个 Django + Expo 平台,核心是一个把艺术家、拥有者、拍卖记录都建模为节点的知识图谱。基本上就是你想用上面那种模型做点有意义的事情时,需要的那一层数据基建。
两个项目最后都把我拉回了同一个问题:你真的可以预测一件艺术品会卖多少钱吗?答案是:可以,但不是通过看作品本身做到的。真正起作用的特征几乎全是社会性信号。
为什么艺术品难以估价#
在写代码之前,我花了几天时间读评估师和拍卖行实际是怎么定价的。要考虑的因素列出来很长,而且大多数都不能干净地量化。
- 来源(provenance):谁拥有过它,曾在哪里展出,被哪些目录提到。
- 归属与真伪:经基金会确认的真品,价值比"传为某人所作"的作品高出几个数量级。
- 艺术家声誉:个展、双年展参与、博物馆收藏、批评界反响。
- 状态:保存状况、修复历史、修复师报告。
- 稀缺性:版数大小、形式、主题在艺术家作品体系中的罕见程度。
- 媒介:布面油画通常优于纸本作品,纸本作品又优于版画。
- 机构认可:被 MoMA、Tate、Louvre 这类机构收藏的作品,在二级市场上盖了一个买家信任的章。
- 市场时机:近期可比销售很重要;五年前的可比案例已经过时。
苏富比的专家也会聊一种叫"情感价值"的东西:收藏者的渴望、竞价大战的动力、个人共鸣。这能把成交价推得远超任何理性的估算。你没法直接建模它,但可以通过拍卖行的预估价间接捕捉它的形状。
实务中最常用的估值方法是 可比销售分析:找出同一艺术家相似作品的近期拍卖结果,再做调整。XGBoost 模型本质上做的就是这件事,只是在更大规模上、用比任何人类评估师能手工追踪的更多特征来做。
论文的核心论点#
Lee 等人提出的论点反直觉:艺术品的视觉内容几乎解释不了价格。仅使用视觉特征(颜色、构图、边缘密度、ResNet18 嵌入)的模型 R² 大约只有 0.055。比直接猜平均值好不了多少。
仅使用艺术家级别"社会性"特征(职业阶段、展览经历、过往拍卖价格、ArtFacts 排名)的模型可以达到 R² ≈ 0.73。再把拍卖行的预估价加进去做特征,能升到 0.92。
换句话说,作品本身几乎不重要。重要的是是谁做的,以及市场对这个人已经说了些什么。
论文的第二个主张是:这个差距在新兴市场里还要更大。这里的新兴市场指的是美国、英国、法国、德国这些既有核心市场之外的地方。在那些市场中,社会信号的作用更强,同时专家预估的准确度更低,给算法预测留下了更多增加价值的空间。
复现论文#
我接到的需求很直接:作为一名独立开发者,做一个论文的 MVP 复现。不上线,没有实时数据管道。忠实重写、原型级别的代码、把发现写进一份书面报告。
数据#
论文以补充材料形式提供了清洗过的 CSV:
| 文件 | 行数 | 内容 |
|---|---|---|
Df_mloutfull.csv | 86,221 | 原始数据集,500+ 列 |
df_for_ml_improved_up_to_2012.csv | 34,200 | 主清洗数据集,1996–2012 |
df_for_ml_improved_old_market.csv | 29,853 | 仅既有市场 |
df_for_ml_improved_new_market.csv | 4,346 | 仅新兴市场 |
transactions.csv | 114,283 | 含图片链接的原始拍卖记录 |
总共大约 5GB,可以轻松放进内存。这种规模数据集上的 XGBoost 训练在笔记本 CPU 上不到 5 分钟就能跑完。核心模型不需要 GPU。在这个规模的表格数据上,梯度提升树的训练成本基本为零。如果你最近几年大部分时间都在搞神经网络,这件事容易被忘掉。
特征#
模型一共使用 38 个特征,分为三类。
关于艺术家(30 个):
- 人口属性:年龄、性别、教育程度、是否名校。
- 职业:ArtFacts 排名、个展、群展、双年展参与、获奖。
- 收藏:个人和公共收藏数量。
- 价格历史:艺术家最近 5 次和 10 次销售的均值、中位数、最高、最低。
- 面积调整后的价格历史(每平方英寸价格)。
- 地理:艺术家工作和居住地,编码为按国家的标志位。
- 匹配标志:作品的题材是否与艺术家典型题材一致?销售国家是否一致?
关于市场(8 个):
- 拍卖行等级(1–4)。
- 当年该国家/地区的价格水平(最低、平均、中位、最高)。
关于作品本身(非视觉):
- 宽度、高度、平方英寸面积。
- 媒介类别(绘画、版画、摄影、雕塑、其他)。
这份清单里没有的东西,是关于作品实际视觉内容的任何信息。那只在消融研究里出现。
训练/测试拆分#
时间序列拆分,不是随机的。2011 年 5 月之前的所有数据进训练集(约 80%,约 27,360 行),之后的进测试集(约 20%,约 6,840 行)。随机拆分会通过艺术家价格历史特征泄漏未来信息。如果同一艺术家的记录被随机分散在训练集和测试集,测试集的行就已经通过滚动窗口特征"看到"过彼此的价格,R² 会被人为抬高。
时间序列拆分是那种事后看显然、第一次做时却容易漏掉的事情。
模型#
XGBoost 回归,预测 log10(price_usd)。在留出的验证切片上搜索 max_depth 和 learning_rate 超参数。两个模型变体:
- 不用专家预估。 目标 R² ≈ 0.73。
- 使用专家预估。 目标 R² ≈ 0.92。
“使用预估"变体把拍卖行的预售价格下限和上限作为额外特征。仅这两项独自就能达到 R² ≈ 0.90。在其上叠加社会特征再多 0.02。绝对值很小,但这正是超出专家已知信息、真正在做预测工作的那部分。
我希望接近什么#
我并不想超过论文。目标是在所有条件下都把 R² 控制在他们的数字 ±0.03 范围内。头条数字(仅元数据约 0.73、加上预估约 0.92)的可复现性是好的。XGBoost 在固定种子下是确定性的,特征也定义得很清楚。我预期会有偏移的部分有两处:视觉特征消融(PCA 维度或图像预处理上的小差异会让结果挪动),以及新兴市场切分(只有 4,346 行,噪声更大)。
为什么视觉特征几乎没用#
这对我来说是最有意思的结果。论文的视觉流水线为每张图片提取 8,971 个数字:
- GIST 描述子(960 维):整体空间布局。
- 方向梯度直方图(HOG)(2,915 维):边缘结构。
- 颜色直方图(4,096 维):调色板分解。
- ResNet18 特征(1,000 维):高层级预训练嵌入。
- 色彩饱和度(1 维):鲜艳度标量。
- 复杂度(1 维):边缘密度标量。
把这些用 PCA 压缩后喂进 XGBoost,得到 R² ≈ 0.055。仅颜色 0.056。边缘结构 0.029。神经网络嵌入 0.009,基本为零。
干净的解释是,拍卖价格是在艺术家层面而不是单件作品层面被决定的。同一位艺术家的两幅画无论画了什么都会卖出相近的价格。被定价的是签名。
如果你读过拍卖目录上的注释就会明白这为何成立。他们几乎所有的文字都在写来源、展览经历、可比销售。对作品本身几乎不做描述。
如果你认真对待这 5% 的数字,那么作品的美学内容几乎与其市场价值脱钩。市场在奖励的,无论那是什么,都不在画布上。一个在像素层面理解艺术的模型,预测价格时反而比一个只知道艺术家履历的模型更差。
Phase 3 是有条件的#
论文图片链接列指向的是 2012 年还有效的 URL。到 2026 年,大部分都已经死掉。我写的计划在第 8 天就标记了这个风险:随机抽 100 个 URL,看有多少还在。如果一半以上消失了,就整体跳过视觉阶段,把原因写进报告。
反正视觉特征也只解释约 5% 的价格方差。花两周时间和位腐烂搏斗只为确认一个这么小的数字,不是好的交易。把死链接的发现写进报告然后往前走,更划算。
既有市场 vs 新兴市场#
论文为既有市场(美国、英国、法国、德国)和新兴市场(其余 19 个国家)分别训练模型。核心结果:
| 特征集 | 既有市场 R² | 新兴市场 R² |
|---|---|---|
| 仅视觉 | 0.053 | 0.056 |
| 元数据(社会信号) | 0.667 | 0.750 |
| 元数据 + 预估 | 0.916 | 0.859 |
有两件事跳出来。第一,社会信号在新兴市场反而更重要,不是更不重要。直觉可能会以为既有市场数据更丰富,所以社会特征表现更好,但事实正相反。在新兴市场,社会信号承担了更多的预测工作。
第二,新兴市场的专家预估反而更不准。加入预估后 0.916 对 0.859,差距就在这里。在既有市场,算法预测必须和有几十年可比数据的苏富比专家竞争。在新兴市场,那位专家的数据更稀薄,留给算法增加价值的空间更大。
如果想把这种模型商业化部署,新兴市场才是真正能产生价值的地方。
值得说出来的局限#
这是论文复现,不是构建生产系统。它没有做的事情,列举一些:
- 没有实时数据管道。 模型用 1996–2012 的拍卖数据训练,永不更新。
- 没有部署。 产出物是 notebooks 和报告,不是预测 API。
- 没有漂移检测。 模型一旦训练完成,就不知道市场什么时候发生了变化。
- 数据集是冻结的。 加密艺术、NFT、新冠后的市场变化,在训练数据里根本不存在。
- 没有针对韩国市场的特化。 如果想预测 K Auction 或 Seoul Auction 的价格,需要拍卖行特定的特征,可能还需要一个专门给韩国市场的模型。
模型同时也只反映历史模式。如果当代市场在 2015 年前后发生了结构性变化(有人是这么主张的,因为艺术博览会崛起成为一级市场场地,新的收藏者人群也进入了),那么 1996–2012 的模式也许无法泛化。
从论文到平台#
读完并复现这篇论文之后,我对自己同时在做的第二个项目的看法变了。Art Evaluator 最初的设想是一个为艺术展览融资的众筹市场:艺术家在展览开始之前先确保资金,投资者比拍卖市场通常允许的更早接触到新兴艺术家。
产品表层是有意做得简单的。艺术家发布需要资金的即将到来的展览(场地、日期、预计参展作品)。投资者按分级金额($100、$500、$1k、$5k)投资特定的展览,作品卖出时分享上行收益。AI agent 处理艺术家与投资者之间的大部分聊天,所以双方都不必在线也能维持对话节奏。当一家韩国画廊在跨越 14 小时时差和一位美国收藏家交谈时,这一点尤其有用。
一旦你内化了"艺术家才是资产,作品不是"这个教训,数据模型也得跟着变。重要的是:
- 每件作品被谁拥有过(图中的节点链)。
- 它在哪里展出过(机构认可信号)。
- 可比作品卖了多少钱(艺术家的拍卖可比案例)。
- 谁还拥有这位艺术家的其他作品(收藏者网络效应)。
这正是知识图谱该做的事。Django 后端(apps/artworks/models.py)建模四个基本类型:
Artist:创作作品的人。AuctionRecord:包含价格、日期、拍卖行的历史销售记录。OwnershipRecord:谁在哪段时间持有了什么。ScrapeLog:数据本身的来源记录,让我们能审计每一条记录从哪里来。
移动 app(Expo + React Native + @shopify/react-native-skia)把这些全部渲染成一个 force-directed 图。useGraphData 调用 Django 的 /api/graph/ 端点,useForceLayout 每个 tick 在 JS 中跑 d3-force 仿真,GraphCanvas 通过 Skia 把结果画出来。还有一个时间范围滑块,可以在年份之间拖动并观察网络如何演化:哪些收藏者在何时入场、哪些艺术家被哪些博物馆相中、哪些作品在 2008 年的低谷期换了手。
每种节点都有自己的形状和颜色:
| 节点类型 | 形状 | 颜色 |
|---|---|---|
| 艺术家 | 菱形 | 红色 |
| 作品 | 圆角矩形 | 蓝色 |
| 收藏者 | 圆 | 绿色 |
| 经销商 | 圆 | 橙色 |
| 博物馆 | 圆 | 紫色 |
| 遗产管理 | 圆 | 蓝绿 |
| 拍卖行 | 六边形 | 灰色 |
这些形状不是装饰。当你缩小到几百个节点时,光看轮廓就能知道是什么类型的实体,无需等待标签渲染。一个被圆围着的菱形,是一位拥有收藏者网络的艺术家。一个连接着多个菱形的六边形,是一家代理多位艺术家的拍卖行。一眼就能读出市场的结构。
第二个标签把同样的数据放在 vis-timeline 时间轴上:持有期作为水平条,销售作为点事件。同一张图,不同的视角。当你想看的是谁在什么时候持有了什么的顺序,而不是某一时刻的网络形状时,这个视图很有用。
Art Evaluator 本身不是价格预测工具。它是垫在那种工具下面的数据层。如果你想把像 Lee 等人那样的模型喂上活的、当下的数据,而不是冻结在 2012 年的 CSV,那么这就是你需要的结构。
把估价做成游戏(众包)#
我还没做出来、却最感兴趣的部分,是把艺术品估价做成一款游戏。
Lee 等人的论文把拍卖行预售估价作为一个特征,由此带来的 R² 提升非常大。这些预估之所以有价值,是因为它们是受过训练的专业人士的聚合判断,是看过成千上万件可比作品、且对结果有切身利益的人做出的判断。但拍卖行专家是一个狭窄而昂贵的资源。全球大概只有几百位,他们只参与具体的委托案,触及不到那条还没人来委托的艺术家长尾。
我反复回到的问题是:能不能从一个更宽、更便宜的判断池里合成出一个可比信号?
大致的设计:
- 给用户看一件作品:图片、尺寸、年份、艺术家名字、简短履历。
- 问他们这件作品在拍卖会上会卖多少钱。
- 让他们选一个价格区间,或者直接猜出锤价。
- 提交后揭示真实成交价。
- 用类似 Brier 分数的方式逐渐为他们打一个准确度评级。
- 给出排行榜、连续打卡、连胜徽章。
- 用历史准确度对每位用户的未来预测加权。
这其实就是一个艺术品价格预测市场,套上了猜价格游戏的外壳。循环和 Geoguessr 或 chess.com 的谜题评分一样:可重复、可打分、有反馈,能让人练出技能。猜得好的人在排行榜上爬升,他们未来的猜测在聚合信号里也占更大权重。
模型这一侧才是真正有用的地方。这些猜测的加权聚合就成了可以和社会信号一起喂给 XGBoost 的一个特征。如果群体的准确度加权中位数和锤价相关性不错,你就为那些还没有专业预估的作品制造出了一个近似的合成拍卖行预估。那正是 Lee 等人的模型最需要帮助的艺术家长尾区域。
冷启动这个角度也成立。模型在价格历史丰富的艺术家上表现不错,在只有三笔销售的艺术家上很差。三笔销售加上一千个群体猜测,至少能开始工作了。众包估价是在为基础数据覆盖不到的情形生成训练信号。
游戏化在这里很重要,因为让群体可信赖的唯一办法,是让参与本身好玩到大家会反复参与。一次性表单只能从那些点过去看一眼的人那里获得噪声数据。每日打卡加排行榜、再加上一个校准徽章,能让同一个人在一年内做出 500 个经过认真考虑的预测。规模加上自我筛选(猜得好的人留下,猜不好的人觉得无聊离开),才是让你最后拿到的不是噪声而是信号的方式。
在动手之前需要解决的几个设计问题:
- 给用户看什么? 只有图片和履历?还是也要给可比销售作为上下文?上下文越多,猜测越有依据,但这也意味着用户基本上是在重复你已经展示给他们的东西。
- 价格反馈给到什么程度? 揭示精确锤价?区间?只告诉他们是不是在 ±20% 以内?太精细会训练出锚定具体数字的用户,太模糊则没法校准。
- 怎么防止排行榜被刷? 玩家会倾向于猜自己已经知道的艺术家。Banksy 的猜测更像是常识题而不是技能题。可能需要类似 Duolingo 课程选择的强制随机抽样,并为艺术家姓名隐藏的"盲猜"轮单独设一个排行榜。
- 怎么处理事后偏见? 一旦用户知道一件 Basquiat 卖了 1.1 亿美元,他就再也无法不知道。新颖、未见过的作品供给是让循环保持诚实的关键,而每周这种供给是有限的。
游戏化的框架也把平台的两半绑在一起。众筹一侧奖励的是当展览财务上表现好时的投资者。猜价游戏一侧不仅是付费的投资者,而是奖励任何会准确叫价的人。两者都是同一个想法的变体:让群体的集体判断成为一个可交易的信号。一个交易资本,一个交易注意力。真正培养出准头的玩家,最终可以毕业到投资者那一侧,带着可验证的价格预测准确度记录加入。这比"认识对的画廊主"是好得多的过滤。
我带走的几件事#
入场前没料到的一些东西:
1. 预售估价非常厉害。 拍卖行经常因为不透明的定价被骂,但他们的预售估价仅凭自己就能捕捉接近 90% 的价格方差。专家在做什么且不论,他们做得不错。
2. 作品本身在统计上几乎无关紧要。 如果你是出于审美原因关心艺术,这是个让人难受的结论。市场不为你看到的东西定价。它为别人已经为相邻作品付出的价格定价。
3. 时间序列拆分是评估价格模型的唯一诚实方法。 随机拆分会给你好看的 R²,但这种数字到了真实的生产部署里站不住脚。
4. 梯度提升树仍然是这里的正确工具。 论文里 XGBoost 击败了所有神经基线。对这种规模、这种工程化特征结构的表格数据,没有理由去伸手够 transformer。
5. 有趣的机会在新兴市场。 那是专家定价最稀薄、算法预测能填补的差距最大的地方。
6. 群体是一个未被充分利用的数据来源。 Lee 等人模型里最大的单一特征就是拍卖行的预售估价。如果一群被校准过的群体能为艺术家长尾产生可比的信号,那就是真正的机会。它既可以作为模型输入,也可以本身就是一个产品面。
两个项目最后比我计划得更互补。论文复现教会我什么在预测价格;平台工作教会我要真正使用那种知识需要什么样的数据结构。游戏化的想法把它们绑到一起。平台的知识图谱供给作品和历史销售。猜价游戏生成一个由群体推导出的预估特征。模型把这个特征和社会信号一起消费,为本来对它不可见的艺术家产出预测。
什么都没完成。论文复现是一个有书面报告支撑的、能跑的原型。平台是一个带种子数据的演示。众包估价游戏目前只以你刚刚读到的设计笔记的形式存在。但贯穿其中的那条线足够一致,我觉得正确的形状大致是清楚的:给艺术家定价,不是给作品定价;聚合的是群体,不仅是专家;把估价当成市场一起做的事,而不是专家自上而下交给你的东西。
如果有时间,这就是我下一步想做的版本。

