Hello.
Context:
There are several users who have purchased insurance.
There are several types of insurance. For example: "KASKO", "Green Card", "OSAGO", etc.
I want to find a pattern: if the majority of users who bought "KASKO" insurance also buy "Green Card" insurance - offer new users who bought "KASKO" to buy a "Green Card" as well.
To do this, I first create test data (several users, insurances and their relationships):
CREATE (maxDoe:AccountHolder {
firstName: "Max",
lastName: "Doe",
ekbId: "1001",
phone: "0000001",
address: "Lisabon",
gender: "male",
creditLimit: 100000
})
CREATE (vasiliyDoe:AccountHolder {
firstName: "Vasiliy",
lastName: "Doe",
ekbId: "1002",
phone: "0000002",
address: "Lisabon",
gender: "male",
creditLimit: 50000
})
CREATE (yevheniiDoe:AccountHolder {
firstName: "Yevhenii",
lastName: "Doe",
ekbId: "1003",
phone: "0000003",
address: "Lisabon",
gender: "male",
creditLimit: 150000
})
CREATE (insurance:Insurance {
name: "Insurance",
activeOcagoAmount: 10,
activeKaskoAmount: 30,
activeHealth: 0,
totalActive: 40
})
CREATE (carInsurance:InsuranceCategory{
name: "Car Insurance",
categoryName: "carInsurance",
categoryId: 1,
data: "{}"
})
CREATE (osagoInsurance:InsuranceSubcategory{
name: "OSAGO",
categoryName: "carInsurance",
categoryId: 1,
subcategoryName: "osago",
subcategoryId: 1,
data: "{}"
})
CREATE (greenCardInsurance:InsuranceSubcategory{
name: "Green Card",
categoryName: "carInsurance",
categoryId: 1,
subcategoryName: "greenCard",
subcategoryId: 2,
data: "{}"
})
CREATE (kaskoInsurance:InsuranceSubcategory{
name: "KASKO",
categoryName: "carInsurance",
categoryId: 1,
subcategoryName: "kasko",
subcategoryId: 3,
data: "{}"
})
CREATE
(osagoInsurance)-[:SUBCATEGORY_OF]->(carInsurance),
(greenCardInsurance)-[:SUBCATEGORY_OF]->(carInsurance),
(kaskoInsurance)-[:SUBCATEGORY_OF]->(carInsurance)
CREATE (liveInsurance:InsuranceCategory{
name: "Live Insurance",
categoryName: "liveInsurance",
categoryId: 1,
data: "{}"
})
CREATE
(carInsurance)-[:CATEGORY_OF]->(insurance),
(liveInsurance)-[:CATEGORY_OF]->(insurance)
CREATE
(maxDoe)-[:PURCHASED]->(kaskoInsurance),
(maxDoe)-[:PURCHASED]->(greenCardInsurance),
(yevheniiDoe)-[:PURCHASED]->(kaskoInsurance),
(yevheniiDoe)-[:PURCHASED]->(greenCardInsurance),
(vasiliyDoe)-[:PURCHASED]->(kaskoInsurance)
Then I'm using this code to create a new relationship between new user (vasiliyDoe) and the insurance (kaskoInsurance)
MATCH (accountHolder:AccountHolder)-[:PURCHASED]->(:InsuranceSubcategory {subcategoryName: 'kasko'})
WITH COUNT(DISTINCT accountHolder) AS usersKasko
MATCH (accountHolder:AccountHolder)-[:PURCHASED]->(:InsuranceSubcategory {subcategoryName: 'kasko'})
WITH usersKasko, COUNT(DISTINCT accountHolder) AS usersKaskoTest
MATCH (accountHolder)-[:PURCHASED]->(:InsuranceSubcategory {subcategoryName: 'greenCard'})
WITH usersKasko, usersKaskoTest, COUNT(DISTINCT accountHolder) AS usersKaskoGreenCard
WITH usersKasko, usersKaskoTest, usersKaskoGreenCard / toFloat(usersKaskoTest) AS ratio
WHERE ratio > 0.5
CREATE (kaskoInsurance)-[:SUGGESTED_TO]->(vasiliyDoe)
RETURN ratio;
For some reason, it's creating new nodes and relationship between them, but not connections previously created ones.
I'm sure I'm missing some fundamental principle of how the neo4j works.
I would be grateful for any recommendations, including how to improve the code syntax to achieve my goal.
Thank you.
- neo4j browser version