当前位置:首页>python>【论文复现代码】Python评估企业供应链风险:基于年报文本挖掘的实证研究方法复现

【论文复现代码】Python评估企业供应链风险:基于年报文本挖掘的实证研究方法复现

  • 2026-10-21 13:26:24
【论文复现代码】Python评估企业供应链风险:基于年报文本挖掘的实证研究方法复现

【01|研究背景与意义】

供应链风险是影响企业稳健经营的关键因素,但如何量化评估这一风险一直是学术研究的难点。本文复现《数量经济技术经济研究》2025年刊发的《企业供应链风险与纵向并购决策之谜》研究方法,通过文本挖掘技术从上市公司年报中提取供应链风险信息,为相关研究提供可复现的代码方案。

【02|方法概述:词典法与句频统计】

该方法基于词典法与句频统计,核心思路包括:1.构建专业词典:供应链词典(92词)与风险词典(176词)2.文本预处理:年报MD&A章节分句、清洗、分词3.句频统计:识别同时包含供应链词汇和风险词汇的句子4.指标计算:构建供应链风险相对指标 ChainRisk

计算公式:

其中:= MD&A中同时含供应链和风险词汇的句子数,= 年报全文中含风险词汇的句子数

【03|核心代码实现】

1. 专业词典加载与初始化

# 从Excel文件加载供应链风险词典df = pd.read_excel("./data/风险词典.xlsx")# 构建六大词典体系SUPPLY_CHAIN_CONCEPT = set(df.at[0, "词典"].split("、"))  # 供应链概念词典SUPPLY_CHAIN_POSITION = set(df.at[1, "词典"].split("、"))  # 供应链位置词典  PRODUCTION_PROCESS = set(df.at[2, "词典"].split("、"))     # 生产流程词典SUPPLY_CHAIN_MANAGEMENT = set(df.at[3, "词典"].split("、")) # 供应链管理词典SUPPLY_CHAIN_OTHER = set(df.at[4, "词典"].split("、"))     # 其他相关词典RISK_WORDS = set(df.at[5, "词典"].split("、"))            # 风险词典# 合并供应链词典SUPPLY_CHAIN_WORDS = (SUPPLY_CHAIN_CONCEPT | SUPPLY_CHAIN_POSITION |                       PRODUCTION_PROCESS | SUPPLY_CHAIN_MANAGEMENT | SUPPLY_CHAIN_OTHER)

2. 文本预处理与分句

defclean_text(text):"""文本清洗:去除数字字母、保留中文字符和关键标点"""    text = re.sub(r"[a-zA-Z0-9]", "", text)  # 删除数字和英文字母    text = re.sub(r"\s+", "", text)  # 删除空白字符    text = re.sub(r"[^\u4e00-\u9fa5,,。!?\!\?]", "", text)  # 保留中文和标点return textdefsplit_annual_report_sentences(text):"""将年报全文分割为句子"""    sentences = re.split(r"[。!?\!\?]", text)    sentences = [s.strip() for s in sentences iflen(s.strip()) > 2]  # 过滤短句return sentences

3. 核心风险评估函数

defanalyze_supply_chain_risk(mda_text, annual_report_text):"""分析供应链风险核心函数"""# 文本预处理和分句    cleaned_mda = clean_text(mda_text)    mda_sentences = split_mda_sentences(cleaned_mda)    cleaned_annual_report = clean_text(annual_report_text)    annual_report_sentences = split_annual_report_sentences(cleaned_annual_report)# 计算T_i,t:MD&A中同时含供应链和风险词汇的句子数    ti_sentences = 0for sentence in mda_sentences:        words = jieba.lcut(sentence)        has_risk = any(word in RISK_WORDS for word in words)        has_supply_chain = any(word in SUPPLY_CHAIN_WORDS for word in words)        has_positive = any(word in POSITIVE_WORDS for word in words)# 关键判断逻辑:有风险词、有供应链词、无积极词ifnot has_positive and has_risk and has_supply_chain:            ti_sentences += 1# 计算N_i,t:年报全文中含风险词汇的句子数    ni_sentences = 0for sentence in annual_report_sentences:        words = jieba.lcut(sentence)        has_risk = any(word in RISK_WORDS for word in words)        has_positive = any(word in POSITIVE_WORDS for word in words)ifnot has_positive and has_risk:            ni_sentences += 1# 计算供应链风险指标    chain_risk = round(ti_sentences / ni_sentences, 5) if ni_sentences > 0else0return {"ti_sentences": ti_sentences,      # 供应链风险句子数"ni_sentences": ni_sentences,      # 总风险句子数  "chain_risk": chain_risk,          # 供应链风险指标"mda_sentences": len(mda_sentences),          # MD&A句子总数"annual_report_sentences": len(annual_report_sentences)  # 年报句子总数    }

【04|数据准备与处理】

数据源结构:

  • • 年报mda.csv:上市公司MD&A章节文本
  • • 年报全文.csv:上市公司完整年报文本
  • • 风险词典.xlsx:专业词典文件

数据合并与处理:

# 读取数据mda_df = pd.read_csv("./data/上市公司年报/年报mda.csv", dtype={"股票代码": str})full_df = pd.read_csv("./data/上市公司年报/年报全文.csv", dtype={"股票代码": str})# 合并MD&A和全文数据company_df = pd.merge(mda_df, full_df, on=["股票代码", "年份"], how="left")# 应用风险评估函数company_df["result"] = company_df.apply(lambda row: analyze_supply_chain_risk(        row["管理层讨论文本内容"],         row["全文内容"]    ), axis=1)

【05|结果输出与统计分析】

处理完成后,数据框包含完整的风险评估结果:输出字段说明:

  • • mda_sentences:MD&A章节句子数量
  • • annual_report_sentences:年报全文句子数量
  • • ti_sentences:供应链风险句子数
  • • ni_sentences:总风险句子数
  • • chain_risk:供应链风险指标(核心结果)

描述性统计结果:

统计指标
数值/描述
样本数量
43份年报
平均MD&A句子数
147.1句
平均全文句子数
1204.7句
平均供应链风险指标
0.016
风险句子数范围
17-49句

【06|方法优势与适用性】

技术优势:

1.词典专业性:基于文献构建的完整词典体系2.处理准确性:考虑积极词汇排除,避免误判3.可复现性:完整的端到端处理流程4.可扩展性:易于适配其他文本分析任务

适用场景:

  • • 上市公司供应链风险研究
  • • 文本信息挖掘与量化分析
  • • 风险管理实证研究
  • • 信息披露质量评估

本复现工作不仅提供了具体的技术实现,更展示了文本挖掘方法在经济学研究中的应用潜力。通过将非结构化的文本信息转化为结构化数据,为供应链风险管理研究提供了新的方法论支持。

参考文献:蓝发钦, 胡晓敏, 国文婷, 等. 企业供应链风险与纵向并购决策之谜:来自文本挖掘的经验证据[J]. 数量经济技术经济研究, 2025, 42(01): 116-135.代码说明:本文完整复现原文献方法,基于Python实现,包含数据预处理、词典匹配、指标计算全流程。

欢迎在评论区交流文本挖掘的技术细节与研究应用!

代码领取方式

C0005

转发本推文到朋友圈

添加客服

发送代码编号

发送保留2小时并集齐10个点赞的截图

即可免费领取代码

最新文章

随机文章