【问题标题】:Cluster Analysis using R for large data sample使用 R 对大数据样本进行聚类分析
【发布时间】:2015-05-22 04:49:20
【问题描述】:

我刚开始使用电子商务零售业务的 R 对客户数据库进行细分。我寻求一些关于进行此练习的最佳方法的指导。 我已经搜索了这里已经发布的主题,并像 dist() 和 hclust() 一样尝试了它们。但是我遇到了一个或另一个问题并且无法克服它,因为我是使用 R 的新手。 这是我的问题的简要描述。 到目前为止,我有大约 480K 的客户记录。数据包含以下列:

  • 电子邮件ID
  • 性别
  • 城市
  • 到目前为止的总交易量
  • 平均篮子价值
  • 平均购物篮大小(一次交易中购买的商品数量)
  • 每笔交易要求的平均折扣
  • 自用户首次购买后的天数
  • 两次购买之间的平均持续时间
  • 自上次交易以来的天数

此练习的业务目标是确定最有利可图的细分市场,并使用广告系列鼓励这些细分市场的重复购买。我能否就如何成功地做到这一点获得一些指导,而不会遇到样本大小或列的数据类型等问题?

【问题讨论】:

  • 您知道如何对数据进行子集化,以便获得仅包含数字数据的矩阵吗?如果是这样,请执行此操作,然后致电 disthclust。我想如果其中任何一个字段容易出现较大差异,您可能需要调整其中的一些字段。如果这些信息还不够,最好提供数据样本和问题所在,以便我们提供帮助。
  • 感谢 blakeoft 的回复。以下是我必须提供的进一步信息:
  • 1.恐怕我不知道如何对数据 2 进行子集化。是的,自上次交易以来的天数等某些字段差异很大。值范围从 1 到 1400
  • 无法提供准确的数据样本。但是,我可以说这些列与问题中描述的列完全相同。前 3 列(电子邮件、性别和城市)是文本,其余是数字。这是我在尝试 dist() > d hc 65536L) stop("size 不能是 NA 也不能超过 65536") : 需要 TRUE/FALSE 的地方缺少值
  • 这个问题更多地是关于集群技术而不是编程,应该在 Cross Validated 上提问,而不是 SO

标签: r cluster-analysis


【解决方案1】:

阅读this 了解如何对数据帧进行子集化。当您尝试定义 d 时,看起来您正在为大量数据提供方法,这可以通过首先对表进行子集来解决。如果没有,您可能希望对数据进行随机抽样,而不是全部抽样。假设您知道名为cust_data 的数据框的第 4 列到第 10 列包含数字数据,那么您可以试试这个:

cust_data2 <- cust_data[, 4:10]
d <- dist(cust_data2)

对于较大的值,您可能希望记录转换它们 - 只是试验一下,看看什么是有意义的。我真的不确定,这只是一个建议。也许选择更合适的聚类或距离度量会更好。

最后,运行hclust时,需要传入d矩阵,而不是原始数据集。

h <- hclust(d, "ave")

【讨论】:

    【解决方案2】:

    遗憾的是,您的数据不包含任何属性来表明哪些类型的项目/交易没有导致销售。

    我不确定集群是否适合这里。

    这里有一些想法:

    首先将您的数据分成一个训练集(比如 70%)和一个测试集。

    建立一个简单的线性回归模型,例如,“平均篮子价值”作为响应变量,所有其他变量作为自变量。

    fit &lt;-lm(averagebasketvalue ~., data = custdata)

    在训练集上运行模型,确定重要属性(summary(fit) 输出中至少有一颗星的属性),然后关注这些变量。

    通过计算测试集的 R 平方和误差平方和 (SSE),检查您在测试集上的回归系数。你可以使用 predict() 函数,调用看起来像

    fitpred <- predict(fit, newdata=testset)
    summary(fitpred) # will give you R²
    

    也许“城市”包含太多独特的值而没有意义。尝试通过引入新属性 CityClass 来概括它们(例如 BigCity-MediumCity-SmallCity ...或任何对您的城市有用的分类方案)。您也可以将模型设置为“性别”。删除“电子邮件 ID”。

    这可能会持续一段时间...与模型一起尝试获得更好的 R 平方和 SSE。

    我认为基于树的模型 (rpart) 在这里也可以很好地工作。

    那么您以后可能会更改为聚类分析。

    【讨论】:

    • 非常感谢 blakeoft 和 knb,您的回复非常有帮助。如果可以的话,肯定会尝试这些并在此处更新进度。再次道歉,如果问题放错了地方,因为方法本身缺乏明确性。
    猜你喜欢
    • 2012-10-06
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2013-11-11
    相关资源
    最近更新 更多