5D Library › 跨文化契约、实物期权与东南亚出海博弈论 · English
第八章 实践与预注册试验
第一部分 四步契约对齐核查表
前七章可以归结为一份在签约前使用的核查表。它适用于跨国合资、本地代理、联合运营、网红与品牌的长期合作等各种形式的出海项目。每一步都对应前面的一章或几章。
- 显式的停时触发条件。 退出、转向、扩张、结束试点等关键决定,各自在什么可观察的条件下发生?一条完整的触发条件包括五个部分:指标、阈值、时间窗口、双方都能查看的数据来源,以及触发之后具体做什么(包括如何补偿对方的专用性投资)。(第一章、第二章)
- 剩余控制权矩阵。 合同没有写到的情况下,各类决定由谁说了算?是否有决定无人负责?需要快速反应的决定,是否被设成了需要双方一致同意?(第三章、第六章)
- 反馈周期同步。 从市场信号到行动,整个链条要多少周?计划中的调整力度,是否超过了这个延迟下的稳定上限?对顾客可见的调整,是否按「后台快、前台稳」的方式安排?(第四章)
- 本地合规与文化红线。 认证(例如清真认证)、个人数据保护、广告与宣传规范、网红合作的披露规则、宗教与公共节日:每一项是否有负责人和明确的状态?(第五章)
推导
把核查表用于一份虚构的合资条款清单:某消费品牌在一个东南亚市场的上市项目。
# The four-step contract alignment audit applied to a (fictional) draft joint-venture term sheet for
# a consumer-brand launch in one Southeast Asian market.
import math
# Step 1 - explicit stopping triggers. A trigger is complete only if it names a metric, a threshold,
# a time window, the data source both sides can see, and what happens next.
triggers = {
"exit the market": dict(metric=1, threshold=1, window=1, source=0, next_step=1),
"pivot product mix": dict(metric=1, threshold=0, window=0, source=0, next_step=1),
"scale to second city": dict(metric=1, threshold=1, window=1, source=1, next_step=1),
"end the 90-day pilot": dict(metric=1, threshold=1, window=1, source=1, next_step=0),
}
done = [k for k, v in triggers.items() if all(v.values())]
print(f"1 triggers complete: {len(done)}/{len(triggers)} ({', '.join(done)}); missing parts:")
for k, v in triggers.items():
gaps = [f for f, ok in v.items() if not ok]
if gaps: print(f" {k}: {', '.join(gaps)}")
# Step 2 - residual control: who decides what the contract did not foresee?
rights = {"pricing below list": "local", "hiring the country manager": "joint", "changing the brand promise": "HQ",
"responding to a regulator": "unassigned", "stopping a campaign after a complaint": "joint"}
urgent = {"responding to a regulator", "stopping a campaign after a complaint"}
flags = [d for d, who in rights.items() if who == "unassigned" or (who == "joint" and d in urgent)]
print(f"2 decision rights: {len(flags)} need fixing - " + "; ".join(
f"{d} ({rights[d]}{', time-critical' if d in urgent else ''})" for d in flags))
# Step 3 - feedback cycles: total delay from market signal to action, in weeks
delay = {"local weekly report": 1.0, "regional review (fortnightly)": 1.0, "HQ approval queue": 2.5,
"execution lead time": 1.0}
tau = sum(delay.values())
planned_gain = 0.5 # 'close half of the gap we see' each cycle
limit = 2 * math.sin(math.pi / (2 * (2 * round(tau) + 1)))
print(f"3 signal-to-action delay {tau:.1f} weeks; planned correction {planned_gain} per week vs stable limit "
f"{limit:.2f} -> {'oscillation risk: shorten the chain or correct less' if planned_gain >= limit else 'ok'}")
# Step 4 - compliance and cultural red lines, each with an owner and a status
red = [("halal certification for food lines", "local", "applied"), ("personal-data law review", "HQ", "open"),
("advertising standards and claims review", "local", "done"), ("religious and public holiday calendar", "local", "done"),
("influencer disclosure rules", "unassigned", "open")]
open_items = [r for r in red if r[2] != "done"]
print(f"4 red lines: {len(red) - len(open_items)}/{len(red)} closed; open: " +
"; ".join(f"{n} [{o}, {s}]" for n, o, s in open_items))
# 1 triggers complete: 1/4 (scale to second city); missing parts:
# exit the market: source
# pivot product mix: threshold, window, source
# end the 90-day pilot: next_step
# 2 decision rights: 2 need fixing - responding to a regulator (unassigned, time-critical); stopping a campaign after a complaint (joint, time-critical)
# 3 signal-to-action delay 5.5 weeks; planned correction 0.5 per week vs stable limit 0.24 -> oscillation risk: shorten the chain or correct less
# 4 red lines: 2/5 closed; open: halal certification for food lines [local, applied]; personal-data law review [HQ, open]; influencer disclosure rules [unassigned, open]在这份虚构的条款清单里,四条触发条件中只有「扩张到第二个城市」是完整的。「退出市场」缺少双方都能查看的数据来源,这恰恰是第二章模型中最要紧的部分:没有共同的数据来源,退出时对方无法核实触发条件是否真的满足。第二步发现两项需要修正的决定权:「回应监管部门」无人负责;「投诉后暂停投放」需要双方一致同意,而它恰恰需要在几小时内做出。第三步显示,从市场信号到行动的延迟为 5.5 周(约 6 周),计划中每周补齐一半差距的调整力度远远超过这个延迟下约 0.24 的稳定上限,按第四章的模型,这样的项目很可能出现来回摆动。第四步还有三项未完成,其中「网红合作披露规则」无人负责。
注
这份核查表不能替代法律意见。 它的作用是在签约前把最容易被忽略的问题列出来,让双方在第一天就对它们进行讨论。各国的法规会修订,具体条款须请当地合格的律师审查。它也不是一份评分工具:一个项目四步都「通过」,不意味着它会成功。
第二部分 预注册随机情景实验
问题
在跨国商业谈判中,与传统的固定目标合同相比,一份在第一天就写明 90 天探索期、停时规则和里程碑转换机制的状态依存合同,能否在外方随后按规则退出时,提高本地商业人士对外方的信任,并降低他们感知到的违约风险?
为什么用情景实验
真实的合资合同不能随机分配,而且一份合同从签订到退出往往要一年以上。情景实验让参与者阅读一个精心设计的商业情景,随机改变其中的一个要素,然后测量他们的判断 (Aguinis and Bradley 2014)。它的优点是能干净地识别因果效应;缺点是参与者面对的是假设情景,他们的判断不一定等于真实交易中的行为。下文「这项试验不能说明什么」一节会回到这一点。
设计
| 要素 | 规定 |
|---|---|
| 参与者 | 马来西亚、印度尼西亚、泰国、越南、新加坡五国的商业人士,年满 21 岁,有至少两年参与商业合作谈判或管理供应商、代理商、合作伙伴关系的经验;通过独立的专业调查样本库招募,不从作者公司的客户、合作伙伴或网红资源中招募 |
| 语言 | 英语与各国通用语言(马来语、印尼语、泰语、越南语)版本,经双向翻译核对;新加坡参与者使用英语版本 |
| 情景 | 一家虚构的外国消费品公司与一家虚构的本地分销公司签订合作协议,共同推出一个新品牌。参与者扮演本地公司的总经理 |
| 随机分组 | 在每个国家内按 1:1 随机分配。固定目标组:合同写明三年销售目标、双方投入和年度检查。状态依存组:合同写明前 90 天为探索期;写明两个共同查看的指标(每位顾客的获取成本、复购率)及其阈值;写明若连续两个月越过阈值则外方可以退出,退出时按书面公式补偿本地公司为合作所做的人员与渠道投入;未越线则自动转入第二阶段。两份合同的篇幅、措辞风格和双方投入金额相同 |
| 情景事件 | 两组参与者随后读到同一段事件:第 90 天,外方告知本地公司,获取成本连续两个月高于预期,决定退出该市场。固定目标组的事件写为「外方提前终止合作」;状态依存组的事件写为「外方依照合同第某条退出」,并附上与合同所写一致的指标数据。两组得到的补偿金额相同 |
| 共同主要结局 | 读完事件后测量:(1)对外方的信任,用改编自梅耶等人信任模型的「诚实正直」与「善意」分量表(7 级评分)(Mayer et al. 1995; Mayer and Davis 1999);(2)感知违约风险,「如果再与这家公司合作,你认为对方不履行承诺的可能性有多大」(0–100) |
| 次要结局 | 读完合同、事件发生之前测量的信任(检验书面退出条款是否在一开始就降低信任,见下文);愿意与这家公司再次合作的意愿(7 级);愿意把这家公司推荐给同行的意愿 |
| 操纵检查与注意力检查 | 参与者能否正确回答「合同是否规定了退出条件」;两道注意力检查题。未通过者按预先规定排除 |
| 分析 | 每个结局用线性回归,自变量为分组,以国家为分层变量;两项共同主要结局各在双侧 下检验 |
一个事先写明的反方向假设
第一章引述的马尔霍特拉与默宁汉的实验 (Malhotra and Murnighan 2002) 提示了一种可能:书面写明的退出条款,可能在一开始就被读作「对方对这次合作没有信心」,从而降低最初的信任。本试验把这一可能作为次要结局事先登记:如果状态依存组在事件发生前的信任明显低于固定目标组,即使它在事件发生后的信任更高,报告也必须同时写明这一代价。
样本量
推导
# Sample size for the pre-registered vignette experiment. Two arms (fixed-target contract vs
# state-contingent contract with a written 90-day exploration period and stopping rules), randomised
# within each of five countries. Two co-primary outcomes measured after the same day-90 exit event:
# trust in the foreign partner, and perceived risk of breach. Each tested at two-sided alpha 0.025
# (Bonferroni for two outcomes). Effects in SD units; normal approximation for a t-test.
import math
COUNTRIES = 5 # Malaysia, Indonesia, Thailand, Vietnam, Singapore
from statistics import NormalDist
N = NormalDist()
def n_per_arm(d, alpha=0.025, power=0.90):
za, zb = N.inv_cdf(1 - alpha / 2), N.inv_cdf(power)
return math.ceil(2 * (za + zb) ** 2 / d ** 2) + 1
def power(n, d, alpha=0.025):
return N.cdf(d / math.sqrt(2 / n) - N.inv_cdf(1 - alpha / 2))
for d in (0.20, 0.25, 0.30, 0.40):
print(f"standardised effect {d:.2f}: {n_per_arm(d, power=0.80):4d} per arm for 80 % power, "
f"{n_per_arm(d):4d} for 90 %")
n = n_per_arm(0.30)
print(f"chosen: smallest effect of interest 0.30, 90 % power -> {n} analysable per arm")
# Both outcomes must be powered; with correlated outcomes the chance of detecting BOTH true effects
# of 0.30 is at least 1 - 2 * (1 - power) by the union bound:
print(f"power for each outcome {power(n, 0.30):.3f}; for both together at least {1 - 2 * (1 - power(n, 0.30)):.2f}")
recruit = math.ceil(n / 0.80)
print(f"allow 20 % exclusions (failed attention or manipulation checks): recruit {recruit} per arm,"
f" {2 * recruit} in all, about {math.ceil(2 * recruit / COUNTRIES)} per country")
# standardised effect 0.20: 477 per arm for 80 % power, 622 for 90 %
# standardised effect 0.25: 306 per arm for 80 % power, 399 for 90 %
# standardised effect 0.30: 213 per arm for 80 % power, 277 for 90 %
# standardised effect 0.40: 120 per arm for 80 % power, 157 for 90 %
# chosen: smallest effect of interest 0.30, 90 % power -> 277 analysable per arm
# power for each outcome 0.901; for both together at least 0.80
# allow 20 % exclusions (failed attention or manipulation checks): recruit 347 per arm, 694 in all, about 139 per country按最小关注效应 0.30 个标准差、每项共同主要结局双侧 、90% 把握度计算,每组需要 277 名可分析的参与者;两项结局同时被检出的把握度至少为 80%。考虑到约 20% 的参与者可能因未通过注意力或操纵检查而被排除,每组招募 347 人,共 694 人,五国每国约 139 人。各国内部的样本量不足以单独检验国家之间的差别,国家差别只作探索性报告。
判定规则
推导
# Decision rule for the vignette experiment, written before any data exist.
# d_trust: state-contingent arm minus fixed-target arm, trust after the day-90 exit (higher = more trust)
# d_risk: the same for perceived breach risk, sign flipped so that positive = LESS perceived risk.
# Each comes with a 97.5 % confidence interval (two-sided alpha 0.025 per outcome).
SESOI = 0.30
def judge(lo, hi):
if lo >= SESOI: return "benefit of at least the smallest effect of interest"
if lo > 0: return "benefit, size not shown to reach 0.30"
if hi < 0: return "harm"
if -SESOI <= lo and hi <= SESOI: return "no difference worth acting on"
return "unclear"
def verdict(trust, risk, pre_trust):
t, r = judge(*trust[1:]), judge(*risk[1:])
if t.startswith("benefit") and r.startswith("benefit"):
overall = "SUPPORTED in this vignette setting"
elif "harm" in (t, r):
overall = "CONTRARY: explicit stopping rules made the exit look worse"
elif t.startswith("benefit") or r.startswith("benefit"):
overall = "PARTLY supported: one co-primary outcome only"
else:
overall = "NOT supported"
note = ""
if pre_trust[2] < 0: # secondary: trust measured before the event, when the clause is first read
note = "; note: the written exit clause lowered trust before anything happened"
return f"trust {t}; breach risk {r} -> {overall}{note}"
# Invented results, to show in advance how each pattern will be reported: (estimate, low, high)
examples = (((0.45, 0.31, 0.59), (0.38, 0.24, 0.52), (0.05, -0.08, 0.18)),
((0.35, 0.21, 0.49), (0.10, -0.04, 0.24), (-0.20, -0.34, -0.06)),
((0.02, -0.12, 0.16), (-0.03, -0.17, 0.11), (0.00, -0.14, 0.14)))
for e in examples:
print(verdict(*e))
# trust benefit of at least the smallest effect of interest; breach risk benefit, size not shown to reach 0.30 -> SUPPORTED in this vignette setting
# trust benefit, size not shown to reach 0.30; breach risk no difference worth acting on -> PARTLY supported: one co-primary outcome only; note: the written exit clause lowered trust before anything happened
# trust no difference worth acting on; breach risk no difference worth acting on -> NOT supported示例结果是编造的,用来事先说明结果将怎样报告。只有两项共同主要结局都显示出益处时,报告才会写「在情景实验的条件下得到支持」;只有一项显示益处时,写「部分支持」;任一项显示害处时,写「结果与假说相反」。如果书面退出条款降低了事件发生前的信任,报告必须同时写明。
这项试验不能说明什么
第一,这是一项情景实验。参与者没有真正投入资源,也没有真正失去一个合作伙伴;他们在问卷中的判断可能与真实交易中的行为不同。即使结果为阳性,也只说明书面停时规则改变了人们如何解读一次退出,不能说明它会提高真实合资企业的存活率或利润。第二,情景只涉及一种行业和一种退出原因;在不同的行业、不同的合作阶段或不同的退出原因下,结果可能不同。第三,参与者来自四个国家的专业调查样本库,他们不一定能代表各国所有的商业人士,特别是不常使用网络调查的中小企业主。第四,补偿金额在两组中相同;现实中,写明补偿公式本身可能就是信任差别的一大来源,本试验无法把「写明退出条件」与「写明补偿」分开,这需要一项因子设计的后续研究。
伦理与利益冲突
试验须经独立伦理委员会批准,取得知情同意,并在第一位参与者入组之前在公开平台登记方案和分析计划 (Nosek et al. 2018)。参与者按时间获得报酬,可以随时退出;情景中的公司均为虚构,不涉及任何真实企业。
利益披露
作者创办并经营跨境网红营销与数字营销机构 Asia Influencer X 与 Yafu Global,业务覆盖马来西亚、印度尼西亚、泰国、越南等东南亚市场,经常与本地合伙人、品牌方和网红签订合作契约,因此与本书主题有直接的商业利益关系。本书不推销任何服务,不使用作者公司的客户或项目数据作为证据;第八章的试验设计为由独立于作者企业的研究人员实施和分析;书中所有代码与研究方案均公开,供任何人检验。为限制利益的影响:参与者不从作者公司的客户、合作伙伴或网红资源中招募;情景材料在入组前公开;无论结果如何,结果、数据和代码都将公开。
参考文献
Fan, Y. (2026). Cross-Cultural Contracts, Real Options and Game Theory of Southeast Asian Market Entry: Relational Contracting, Optimal Stopping Thresholds and Institutional Distance, Read Beside the Art of War [跨文化契约、实物期权与东南亚出海博弈论] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23753261 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).