You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中按欺诈因子拟合Gamma分布并绘制分组对比曲线

分组拟合Gamma分布并绘制对比曲线方案

你已经迈出了最关键的第一步,我来帮你把剩下的流程补全,实现按fraud分组拟合Gamma分布,并画出区分两组的拟合曲线。以下是完整的R代码和步骤说明:

1. 加载必要工具包

首先确保你安装了fitdistrplus(用来拟合概率分布)和ggplot2(用来绘制美观的图形),如果没安装先执行安装命令:

install.packages(c("fitdistrplus", "ggplot2"))

然后加载包:

library(fitdistrplus)
library(ggplot2)

2. 完成两组的Gamma分布拟合

假设你的数据框是df,继续完成欺诈组(fraud=1)和非欺诈组(fraud=0)的拟合:

# 拟合欺诈组的Gamma分布
fit.gamma1 <- fitdist(df$amount[df$fraud == 1], distr = "gamma")
# 拟合非欺诈组的Gamma分布
fit.gamma0 <- fitdist(df$amount[df$fraud == 0], distr = "gamma")

注意:如果你的amount列存在0值,Gamma分布的定义域是x>0,会导致拟合失败。遇到这种情况可以给0值加一个极小的偏移量,比如:

df$amount[df$amount == 0] <- 1e-6

3. 生成拟合曲线的数据源

为了画出平滑的曲线,我们需要生成一系列连续的x值,并计算对应两组Gamma分布的密度值:

# 取交易金额的范围生成1000个连续点
x_vals <- seq(min(df$amount), max(df$amount), length.out = 1000)
# 计算欺诈组的Gamma密度
y_gamma1 <- dgamma(x_vals, 
                   shape = fit.gamma1$estimate["shape"], 
                   rate = fit.gamma1$estimate["rate"])
# 计算非欺诈组的Gamma密度
y_gamma0 <- dgamma(x_vals, 
                   shape = fit.gamma0$estimate["shape"], 
                   rate = fit.gamma0$estimate["rate"])

4. 绘制对比曲线(结合直方图)

用ggplot2绘制原始数据的直方图,并叠加两条拟合曲线,这样能直观对比数据分布和拟合效果:

ggplot(df, aes(x = amount)) +
  # 绘制两组的直方图(按密度缩放,半透明叠加)
  geom_histogram(aes(fill = factor(fraud), y = ..density..), 
                 alpha = 0.5, bins = 30, position = "identity") +
  # 添加欺诈组的拟合曲线
  geom_line(aes(x = x_vals, y = y_gamma1, color = "欺诈组"), 
            size = 1, linetype = "solid") +
  # 添加非欺诈组的拟合曲线
  geom_line(aes(x = x_vals, y = y_gamma0, color = "非欺诈组"), 
            size = 1, linetype = "dashed") +
  # 设置颜色映射
  scale_fill_manual(values = c("0" = "#63B8FF", "1" = "#FF6347")) +
  scale_color_manual(values = c("欺诈组" = "#FF4500", "非欺诈组" = "#1E90FF")) +
  # 设置图表标签
  labs(title = "交易金额的Gamma分布拟合(欺诈vs非欺诈)",
       x = "交易金额",
       y = "密度",
       fill = "欺诈标记",
       color = "拟合曲线") +
  # 使用简洁主题
  theme_minimal()

额外小技巧

如果你想查看拟合的参数和诊断信息,可以直接打印拟合对象:

print(fit.gamma1)
print(fit.gamma0)
# 绘制拟合诊断图(Q-Q图、密度对比等)
plot(fit.gamma1)
plot(fit.gamma0)

内容的提问来源于stack exchange,提问作者steves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:33:39