分辨多个用户之间是否是分身的算法?

2024-07-29 11:34:35 +08:00
 Grocker

我有一个需求是为了分辨多个用户之间是否是分身(需求背景是为了防止新注册用户薅羊毛,优惠力度挺大的,是分身的用户只要一人享受了优惠,其他人不能再次享受), 所以我要将多个用户之间人为的去关联,比如用户 A 关联了 B ,A 和 B 互为分身;用户 B 再关联了 C ,B 和 C 互为 分身,C 和 A 也互为分身,因为有中间人 B ,以此类推,中间人的层级不限,这种用推荐使用什么算法实现呢?

我自己想到的是多存数据将这种层级平铺:

当用户 A 直接关联用户 B 时,我们在 associations 表中插入两条记录:

associations 表结构:user_id 关联用户 ID ,associated_user_id:被关联用户 ID ,is_direct:是否是直接关联

INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (A 的用户 ID, B 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (B 的用户 ID, A 的用户 ID, TRUE);

当用户 B 再直接关联用户 C 时,不仅插入 B 和 C 之间的直接关联记录,还插入 A 和 C 之间的间接关联记录:

INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (B 的用户 ID, C 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (C 的用户 ID, B 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (A 的用户 ID, C 的用户 ID, FALSE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (C 的用户 ID, A 的用户 ID, FALSE);

需要用到的场景有: 取消关联某两个用户之间的关联 查询给定用户的所有分身

8310 次点击
所在节点    程序员
74 条回复
murmur
2024-07-29 11:37:02 +08:00
别需求了,现在只能实名制,有多少黑产专门卖抹指纹的手机

我看到的下面都是不知所云

最核心的用户特征辨别方法都没有
Grocker
2024-07-29 11:40:21 +08:00
@murmur 辨别方法是线下,因为业务人员知道哪些人之间存在关联关系
murmur
2024-07-29 11:42:10 +08:00
@Grocker 你最好在仔细想一下常见,设备指纹、实名制,这两个最常用的方法你不用

那你有没有想过线下业务推广人员勾结撸公司羊毛

你这需求我真看不懂。。。
Grocker
2024-07-29 11:43:38 +08:00
@murmur 我们场景不一样,是线下教育机构
TArysiyehua
2024-07-29 11:45:32 +08:00
楼上说的对,其实光实名都不太行,之前我待的一家公司就是,实名+手机号才能过的账号,也被黑产刷了一大波。关键就是黑产手上有无数个号。
后来不得不限定只有用户我们的产品才能薅羊毛(就是你必须有类似于购买或者消费记录),这样来说这样的用户是肯定能满足的。
不过这一套又不能用在拉新身上,因为新人他是不会有任何购买或者消费记录的,这样就不得不再设计一套类似于现在很多 app 这样,可以让你信号注册领羊毛,但是变现不了,只能用于消费。(类似于朴朴,淘宝这样的拉新)

当然如果你的优惠是针对虚拟的东西,这又不一样了。。。

总之一个铁律:不能提现,变现。最好能跟产品商品绑定,优惠下来,哪怕不挣钱,甚至亏一点点,但是产品还是卖了,也不亏。
Grocker
2024-07-29 11:46:03 +08:00
所有用户事先都已实名了,比如有个宝宝,用他妈妈的账号注册了,去买了个低价课,上完后,又用他爸爸的账号注册了再去买了个低价课,就是为了避免这种情况
veni2023
2024-07-29 11:50:56 +08:00
技术上能实现的话,用户体验肯定非常差
wuud
2024-07-29 11:53:45 +08:00
@Grocker #6 如果这个宝宝用他妈妈的手机和身份、他爸爸的手机和身份,这个应该怎么分辨。同好奇,有答案麻烦踢一下
Grocker
2024-07-29 11:58:23 +08:00
@wuud 其实分辨不是这个问题的重点,主要是问算法 😄

我们的业务模式是线下,上课的娃始终没变,自然知道哪些账号之间是存在关联的了
hi909
2024-07-29 12:02:19 +08:00
用树形结构,在数据库中加个 path 字段,例如 A/B/C/D ,就表示 D 的上级是 C 。就和文件夹一样。
Unicornvic
2024-07-29 12:03:00 +08:00
@Grocker 如果“上课的娃始终没变”,那么签协议的时候设置一下主体,判断一下唯一可行吗
hi909
2024-07-29 12:04:45 +08:00
或者可以增加一个 customer group ,每个上课的人都需要有一个 group 。 他爸妈的账号也要关联在这个 group 里。
meilicat
2024-07-29 12:22:12 +08:00
并查集
saberlove
2024-07-29 12:24:29 +08:00
填写娃儿的身份证
zizon
2024-07-29 12:28:03 +08:00
你想想面向对象编程里子类和父类的关系.
wangxiaoer
2024-07-29 12:31:56 +08:00
感觉图数据库很合适拿来用用。
xabcstack
2024-07-29 12:48:47 +08:00
你需要的是账号遗传 DNA 的算法
2Q6flVvMwgSYg5T8
2024-07-29 13:09:15 +08:00
保留 associations 表,同时使用另一个表来记录每个用户的所属分量。遍历 associations 表中的用户,有直接关联的两个用户属于同一分量,通过并查集将他们合并到同一个合集。这样可以吗?
docx
2024-07-29 13:20:53 +08:00
同一设备,同一手机号,同一实名,同一支付方式满足其一即为同一用户

照着那些办羊毛活动的来准没错,他们都是被薅过有经验的
alphaControler
2024-07-29 13:42:58 +08:00
楼主,你搜搜并查集算法。有树的路径压缩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1060831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX