2

我们正在努力正确地建模我们的数据以在 Kedro 中使用 - 我们正在使用推荐的 Raw\Int\Prm\Ft\Mst 模型,但在一些概念上遇到了困难......例如

  • 什么时候数据集是特征而不是主数据集?区别似乎很模糊...
  • 一个主数据集可以使用来自另一个主数据集的数据吗?
  • 从 INT 层构建要素数据集是一种好习惯吗?还是应该始终通过初级?

我很欣赏数据建模没有硬性和快速的规则,但这些都是重大的建模决策,任何关于 Kedro 建模的指导或最佳实践都会非常有帮助,我可以在Kedro 文档中找到一个定义层的表

如果有人可以提供任何关于 Kedro 数据建模的进一步建议或博客\文档,那就太棒了!

4

2 回答 2

4

好问题。正如你所说,这里没有硬性规定,意见也各不相同,但让我分享一下我作为 QB 数据科学家和 kedro 维护者的观点,他曾多次使用过你提到的分层约定。

首先,让我强调一下,如果 kedro 建议的数据工程约定不适合您的需求,那么绝对没有理由坚持它。99% 的用户不会更改data. 这不是因为 kedro 默认结构对他们来说是正确的结构,而是因为他们只是不想改变它。您绝对应该添加/删除/重命名图层以适合自己。最重要的是选择适用于您的项目的一组层(甚至是非分层结构),而不是试图硬塞您的数据集以适应 kedro 默认建议。

现在,假设您遵循 kedro 建议的结构 - 回答您的问题:

什么时候数据集是特征而不是主数据集?区别似乎很模糊...

在简单特征的情况下,特征数据集可能与主要数据集非常相似。如果您考虑更复杂的特征,例如通过聚合随时间窗口形成的特征,这种区别可能最为明显。主数据集将有一列提供原始数据的清理版本,但无需对其进行任何复杂的计算,只需进行简单的转换。假设原始数据是一周内经过你家的所有汽车的颜色。当数据处于主要状态时,它将是干净的(例如将“rde”更正为“red”,可能将“crimson”和“red”映射到相同的颜色)。在主层和特征层之间,我们将对其进行一些不那么琐碎的计算,例如,每天找到一个热编码的最常见的汽车颜色。

一个主数据集可以使用来自另一个主数据集的数据吗?

在我看来,是的。如果您想将多个主表连接在一起,这可能是必要的。一般来说,如果您正在构建复杂的管道,如果您不允许这样做,将会变得非常困难。例如,在要素层中,我可能想要形成一个包含composite_feature = feature_1 * feature_2两个输入feature_1feature_2. 如果要素图层中没有多个子图层,则无法执行此操作。

但是,通常值得避免的是使用来自许多不同层的数据的节点。例如,一个节点从特征层接收一个数据集,从中间层接收一个数据集。这似乎有点奇怪(为什么后面的数据集没有通过特征层?)。

从 INT 层构建要素数据集是一种好习惯吗?还是应该始终通过初级?

从中间层构建功能并非闻所未闻,但似乎有点奇怪。主层通常是构成所有特征工程基础的重要层。如果您的数据处于可以构建特征的形状,那么这意味着它可能已经是主要层。在这种情况下,也许您不需要中间层。

以上几点可以总结为以下规则(在需要时无疑应该打破):

  1. 层中节点的输入数据集L应该都在同一层中,可以是LL-1
  2. 层中节点的输出数据集L应该都在同一层L中,可以是LL+1

如果有人可以提供任何关于 Kedro 数据建模的进一步建议或博客\文档,那就太棒了!

我也有兴趣看看其他人的想法!需要注意的一件可能有用的事情是 kedro 受到 cookiecutter 数据科学的启发,而 kedro 层结构是那里建议的扩展版本。也许其他项目已经采用了这种目录结构并以不同的方式对其进行了调整。

于 2021-06-10T18:30:06.340 回答
1

您的问题促使我们写了一篇更好地解释这些概念的 Medium 文章,它刚刚发表在 Toward Data Science 上

于 2021-07-08T13:26:10.937 回答