返回资讯中心
外部精选
软件工程
#开发者实时流

用AI合成数据做性能测试的优势

来源标题:Benefits of Performance Testing with AI-Generated Synthetic Data

文章介绍如何用DayZSynthesizer生成合成数据用于性能测试。该工具通过从用户定义的取值范围和类别中随机采样生成假数据,不学习真实数据中的模式或相关性。作者以交易数据为例,展示了支付方式、错误状态与欺诈标签之间的流量关系,并说明欺诈在所有支付方式中都很罕见且集中在无记录错误的交易中。

Hacker News 最新skadamat2026/11/5 · 今天17 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

桑基图展示了交易如何在支付方式、错误状态和欺诈标签之间流动。右侧的粗带表明大多数交易没有记录错误——对于绝大多数行,Errors? 列为空(即 null)。较窄的带则细分出罕见错误类型:PIN 错误、余额不足、技术故障等。欺诈在所有支付方式中都很罕见,并且集中在没有记录错误的交易中。

DayZSynthesizer 通过从用户定义的取值范围和类别中随机采样值来生成假数据。与统计模型不同,它不会从真实数据中学习任何模式或相关性。

为了让假数据尽可能逼真,我们利用真实数据集中的信息逐步对其进行配置。

首先,我们从元数据实例化一个 DayZSynthesizer。该合成器初始处于默认状态,它知道列类型,但对真实数据中的实际值、取值范围或空值率一无所知——这些正是我们在后续步骤中要配置的内容。 from sdv.single_table import DayZSynthesizer fake_synthesizer = DayZSynthesizer(metadata) 接下来,我们告诉合成器每个含空值的列的缺失值比例。默认情况下,DayZSynthesizer 假设每列都完全填充,这将生成不含任何空值的假数据。真实的信用卡数据在 Merchant State 和 Errors? 列中存在空值,因此我们显式设置这些比例以匹配——否则假数据会看起来过于完整而不真实。

Set missing value proportions to match real data

for col in ['Merchant State', 'Errors?']: fake_synthesizer.set_missing_values( column_name=col, missing_values_proportion=round( real_data[col].isnull().sum() / len(real_data), 10 ) ) 接下来,我们告诉合成器每个分类列的有效类别。没有这一步,合成器不知道 Merchant Name、Use Chip 等列允许哪些值,要么无法生成,要么生成占位符。我们传入真实数据中的唯一值,使假数据使用相同的词汇表。 cat_columns = [ 'User', 'Card', 'Use Chip', 'Merchant Name', 'Merchant City', 'Merchant State', 'Zip', 'MCC', 'Errors?', 'Is Fraud?' for col in cat_columns: fake_synthesizer.set_category_values( column_name=col, category_values=real_data[col].dropna().unique().tolist() ) 最后,我们为每个非分类列设置数值和日期时间边界。没有这些,合成器不知道 Amount、Year、Month 或 Day 应该从什么范围采样。我们使用真实数据中每列的最小值/最大值——这为假数据提供了逼真的范围,尽管这些范围内的值是均匀随机采样的。 for col in ['Amount', 'Year', 'Month', 'Day', 'Time']: cast = float if col == 'Amount' else int fake_synthesizer.set_numerical_bounds( column_name=col, min_value=cast(real_data[col].min()), max_value=cast(real_data[col].max()) ) if col != 'Amount': fake_synthesizer.set_rounding_scheme( column_name=col, num_decimal_digits=0 ) 现在,让我们生成与真实数据集行数相同的假数据。 num_sample_rows = len(real_data) fake_data = fake_synthesizer.sample(num_sample_rows) fake_data[['Year', 'Month', 'Day', 'Time']] = fake_data[['Year', 'Month', 'Day', 'Time']].astype(int) fake_data.head() User Card Year Month Day Time Amount Use Chip Merchant Name Merchant City Merchant State Zip MCC Errors? Is Fraud? 0 1451 1 1995 2 3 15 2718.94 Chip Transaction 3533508019517891227 Bradley Beach NaN 1840 3405 NaN No 1 429 2 2002 11 12 11 691.59 Online Transaction 6655367386832070574 Airville Algeria 80016 7276 NaN No 2 843 5 2002 10 28 2 4568.73 Online Transaction 5979176342209983088 Ore City Uganda 97470 5311 NaN Yes 3 1402 4 2015 5 20 12 2811.24 Swipe Transaction -5140159998192253928 Arverne AL 22935 5651 NaN Yes 4 644 4 1992 7 23 8 2437.87 Online Transaction 686332575408057196 Bridgeport NJ 7823 5499 NaN Yes 为什么假数据在每个范围内看起来是均匀分布的? 这是设计使然。DayZSynthesizer 专为没有真实数据可供学习、只有模式和范围的场景而构建,因此它在您提供的边界内均匀采样。它唯一的配置选项是边界(set_numerical_bounds、set_datetime_bounds)、类别(set_category_values)、空值比例(set_missing_values)和舍入(set_rounding_scheme);没有用于塑造分布的参数。要捕捉真实世界的形状(偏斜、众数、相关性),您需要一个能从真实数据中学习的合成器——这正是 GaussianCopulaSynthesizer 接下来要做的事情。

GaussianCopulaSynthesizer 学习真实数据中的统计分布和相关性,然后生成保留这些模式的新行。这是与假数据的关键区别——合成数据是建模生成的,而非随机生成的。 注意,我们不需要像对 DayZ 那样进行任何手动配置——不需要类别列表,不需要数值边界,不需要日期时间范围。合成器直接从数据中学习所有这些属性。 from sdv.single_table import GaussianCopulaSynthesizer synthetic_synthesizer = GaussianCopulaSynthesizer(metadata) synthetic_synthesizer.fit(real_data) synthetic_data = synthetic_synthesizer.sample(num_sample_rows) synthetic_data.head() User Card Year Month Day Time Amount Use Chip Merchant Name Merchant City Merchant State Zip MCC Errors? Is Fraud? 0 1594 1 2012 9 5 14 35.35 Swipe Transaction -4500542936415012428 Breaux Bridge IL 2145 5499 NaN No 1 1798 0 2012 7 2 12 134.92 Swipe Transaction -4334232547381218591 Pensacola OH 97504 5499 NaN No 2 332 2 2011 2 13 7 36.44 Swipe Transaction -5581123930363301609 ONLINE WA nan 4121 NaN No 3 1888 2 2018 7 20 15 95.10 Swipe Transaction 3639123430068731390 Detroit OK 47129 5814 NaN No 4 1283 1 2008 11 27 3 12.94 Swipe Transaction -5162038175624867091 Los Angeles PA 10280 5812 NaN No 评估数据质量¶

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →