Skip to content

Instantly share code, notes, and snippets.

@yaravind
Last active February 6, 2019 15:19
Show Gist options
  • Save yaravind/6767290 to your computer and use it in GitHub Desktop.
Save yaravind/6767290 to your computer and use it in GitHub Desktop.
Product Association Recommender
= Product Association Recommender
Aravind R. Yarram <yaravind@gmail.com>
v1.0, 30-Sep-2013
== Domain Model
Association Rules: Support, Confidence and Lift
== Setup
//hide
//setup
//output
[source,cypher]
----
CREATE (m11:Movie { name:"Star Wars: Episode IV - A New Hope (1977)", id:11 })
CREATE (m12:Movie { name:"Finding Nemo (2003)", id:12 })
CREATE (m13:Movie { name:"Forrest Gump (1994)", id:13 })
CREATE (m14:Movie { name:"American Beauty (1999)", id:14 })
CREATE (m22:Movie { name:"Pirates of the Caribbean: The Curse of the Black Pearl (2003)", id:22 })
CREATE (m24:Movie { name:"Kill Bill: Vol. 1 (2003)", id:24 })
CREATE (m38:Movie { name:"Eternal Sunshine of the Spotless Mind (2004)", id:38 })
CREATE (m63:Movie { name:"Twelve Monkeys (a.k.a. 12 Monkeys) (1995)", id:63 })
CREATE (m77:Movie { name:"Memento (2000)", id:77 })
CREATE (m85:Movie { name:"Raiders of the Lost Ark (Indiana Jones and the Raiders of the Lost Ark) (1981)", id:85 })
CREATE (m98:Movie { name:"Gladiator (2000)", id:98 })
CREATE (m105:Movie { name:"Back to the Future (1985)", id:105 })
CREATE (m107:Movie { name:"Snatch (2000)", id:107 })
CREATE (m114:Movie { name:"Pretty Woman (1990)", id:114 })
CREATE (m120:Movie { name:"The Lord of the Rings: The Fellowship of the Ring (2001)", id:120 })
CREATE (m121:Movie { name:"The Lord of the Rings: The Two Towers (2002)", id:121 })
CREATE (m122:Movie { name:"The Lord of the Rings: The Return of the King (2003)", id:122 })
CREATE (m134:Movie { name:"O Brother Where Art Thou? (2000)", id:134 })
CREATE (m141:Movie { name:"Donnie Darko (2001)", id:141 })
CREATE (m146:Movie { name:"Crouching Tiger Hidden Dragon (Wo hu cang long) (2000)", id:146 })
CREATE (u1000:User { name:"kmh1234-wd4321-iamawesome6789", id:1000 })
CREATE (u1001:User { name:"ca6faa08-232e-4ac1-a364-13c062fd3ae4", id:1001 })
CREATE (u1002:User { name:"rdb", id:1002 })
CREATE (u1003:User { name:"skins428", id:1003 })
CREATE (u1004:User { name:"ergunner", id:1004 })
CREATE (u1005:User { name:"886a2ea4-6356-46fd-a904-6e22ff83b8bf", id:1005 })
CREATE (u1006:User { name:"jewelhuq", id:1006 })
CREATE (u1007:User { name:"kdarm", id:1007 })
CREATE (u1008:User { name:"be0e8990-91c1-453b-a087-81feeadde37b", id:1008 })
CREATE (u1009:User { name:"mypetrock", id:1009 })
CREATE (u100:User { name:"deyaeddin-s-y-muhammad", id:100 })
CREATE (u1010:User { name:"8965a9a8-88a4-4a8b-b0c6-89a36457605e", id:1010 })
CREATE (u1011:User { name:"8da3204f-75cc-4457-8b9b-aea3543ade60", id:1011 })
CREATE (u1012:User { name:"af568f6a-7a88-40a0-a735-ed56c50afdc4", id:1012 })
CREATE (u1013:User { name:"f59ac70b-0740-4666-b3b0-49dc6de85651", id:1013 })
CREATE u100-[:HAS_SEEN {rating:5.0}]->m105
CREATE u100-[:HAS_SEEN {rating:4.5}]->m24
CREATE u100-[:HAS_SEEN {rating:4.5}]->m22
CREATE u100-[:HAS_SEEN {rating:4.5}]->m13
CREATE u100-[:HAS_SEEN {rating:4.0}]->m11
CREATE u100-[:HAS_SEEN {rating:5.0}]->m77
CREATE u100-[:HAS_SEEN {rating:4.5}]->m14
CREATE u100-[:HAS_SEEN {rating:3.0}]->m120
CREATE u100-[:HAS_SEEN {rating:3.0}]->m121
CREATE u100-[:HAS_SEEN {rating:4.0}]->m85
CREATE u100-[:HAS_SEEN {rating:4.0}]->m12
CREATE u100-[:HAS_SEEN {rating:3.5}]->m122
CREATE u100-[:HAS_SEEN {rating:4.5}]->m114
CREATE u100-[:HAS_SEEN {rating:4.0}]->m146
CREATE u100-[:HAS_SEEN {rating:4.0}]->m141
CREATE u100-[:HAS_SEEN {rating:5.0}]->m63
CREATE u100-[:HAS_SEEN {rating:3.0}]->m98
CREATE u1000-[:HAS_SEEN {rating:3.5}]->m24
CREATE u1000-[:HAS_SEEN {rating:5.0}]->m22
CREATE u1000-[:HAS_SEEN {rating:3.0}]->m12
CREATE u1000-[:HAS_SEEN {rating:3.0}]->m121
CREATE u1000-[:HAS_SEEN {rating:5.0}]->m13
CREATE u1000-[:HAS_SEEN {rating:4.0}]->m107
CREATE u1000-[:HAS_SEEN {rating:5.0}]->m85
CREATE u1000-[:HAS_SEEN {rating:5.0}]->m105
CREATE u1000-[:HAS_SEEN {rating:3.0}]->m120
CREATE u1000-[:HAS_SEEN {rating:1.0}]->m114
CREATE u1000-[:HAS_SEEN {rating:4.5}]->m122
CREATE u1000-[:HAS_SEEN {rating:5.0}]->m11
CREATE u1000-[:HAS_SEEN {rating:0.5}]->m38
CREATE u1000-[:HAS_SEEN {rating:3.0}]->m146
CREATE u1000-[:HAS_SEEN {rating:4.0}]->m134
CREATE u1000-[:HAS_SEEN {rating:2.5}]->m14
CREATE u1000-[:HAS_SEEN {rating:4.0}]->m63
CREATE u1000-[:HAS_SEEN {rating:5.0}]->m98
CREATE u1001-[:HAS_SEEN {rating:2.0}]->m14
CREATE u1001-[:HAS_SEEN {rating:2.0}]->m63
CREATE u1001-[:HAS_SEEN {rating:4.0}]->m22
CREATE u1001-[:HAS_SEEN {rating:2.0}]->m85
CREATE u1001-[:HAS_SEEN {rating:4.0}]->m11
CREATE u1001-[:HAS_SEEN {rating:2.0}]->m122
CREATE u1001-[:HAS_SEEN {rating:4.0}]->m114
CREATE u1001-[:HAS_SEEN {rating:2.0}]->m120
CREATE u1001-[:HAS_SEEN {rating:3.5}]->m24
CREATE u1001-[:HAS_SEEN {rating:4.0}]->m98
CREATE u1001-[:HAS_SEEN {rating:4.5}]->m146
CREATE u1001-[:HAS_SEEN {rating:4.0}]->m12
CREATE u1001-[:HAS_SEEN {rating:3.0}]->m107
CREATE u1001-[:HAS_SEEN {rating:3.0}]->m141
CREATE u1001-[:HAS_SEEN {rating:3.0}]->m77
CREATE u1001-[:HAS_SEEN {rating:3.0}]->m105
CREATE u1001-[:HAS_SEEN {rating:5.0}]->m13
CREATE u1001-[:HAS_SEEN {rating:3.0}]->m121
CREATE u1002-[:HAS_SEEN {rating:3.5}]->m107
CREATE u1002-[:HAS_SEEN {rating:3.5}]->m24
CREATE u1002-[:HAS_SEEN {rating:4.5}]->m63
CREATE u1002-[:HAS_SEEN {rating:3.5}]->m85
CREATE u1002-[:HAS_SEEN {rating:4.5}]->m12
CREATE u1002-[:HAS_SEEN {rating:4.0}]->m98
CREATE u1002-[:HAS_SEEN {rating:4.0}]->m38
CREATE u1002-[:HAS_SEEN {rating:3.0}]->m13
CREATE u1002-[:HAS_SEEN {rating:3.5}]->m105
CREATE u1002-[:HAS_SEEN {rating:3.0}]->m114
CREATE u1002-[:HAS_SEEN {rating:3.5}]->m120
CREATE u1002-[:HAS_SEEN {rating:3.5}]->m121
CREATE u1002-[:HAS_SEEN {rating:4.0}]->m122
CREATE u1002-[:HAS_SEEN {rating:4.5}]->m77
CREATE u1002-[:HAS_SEEN {rating:3.5}]->m22
CREATE u1002-[:HAS_SEEN {rating:4.0}]->m146
CREATE u1003-[:HAS_SEEN {rating:4.0}]->m22
CREATE u1003-[:HAS_SEEN {rating:3.5}]->m14
CREATE u1003-[:HAS_SEEN {rating:5.0}]->m120
CREATE u1003-[:HAS_SEEN {rating:5.0}]->m122
CREATE u1003-[:HAS_SEEN {rating:4.0}]->m12
CREATE u1003-[:HAS_SEEN {rating:4.0}]->m77
CREATE u1003-[:HAS_SEEN {rating:4.0}]->m105
CREATE u1003-[:HAS_SEEN {rating:4.0}]->m107
CREATE u1003-[:HAS_SEEN {rating:5.0}]->m121
CREATE u1003-[:HAS_SEEN {rating:4.5}]->m85
CREATE u1003-[:HAS_SEEN {rating:4.5}]->m13
CREATE u1003-[:HAS_SEEN {rating:4.5}]->m24
CREATE u1004-[:HAS_SEEN {rating:4.0}]->m120
CREATE u1004-[:HAS_SEEN {rating:4.0}]->m77
CREATE u1004-[:HAS_SEEN {rating:4.5}]->m13
CREATE u1004-[:HAS_SEEN {rating:4.0}]->m121
CREATE u1004-[:HAS_SEEN {rating:5.0}]->m98
CREATE u1004-[:HAS_SEEN {rating:3.5}]->m24
CREATE u1004-[:HAS_SEEN {rating:4.5}]->m105
CREATE u1004-[:HAS_SEEN {rating:4.0}]->m122
CREATE u1004-[:HAS_SEEN {rating:2.5}]->m22
CREATE u1005-[:HAS_SEEN {rating:2.0}]->m114
CREATE u1005-[:HAS_SEEN {rating:5.0}]->m85
CREATE u1005-[:HAS_SEEN {rating:1.0}]->m141
CREATE u1005-[:HAS_SEEN {rating:5.0}]->m98
CREATE u1005-[:HAS_SEEN {rating:0.5}]->m38
CREATE u1005-[:HAS_SEEN {rating:4.0}]->m146
CREATE u1005-[:HAS_SEEN {rating:2.0}]->m77
CREATE u1005-[:HAS_SEEN {rating:5.0}]->m12
CREATE u1005-[:HAS_SEEN {rating:4.5}]->m105
CREATE u1005-[:HAS_SEEN {rating:2.0}]->m14
CREATE u1005-[:HAS_SEEN {rating:5.0}]->m107
CREATE u1005-[:HAS_SEEN {rating:3.5}]->m120
CREATE u1005-[:HAS_SEEN {rating:3.0}]->m24
CREATE u1005-[:HAS_SEEN {rating:4.0}]->m63
CREATE u1005-[:HAS_SEEN {rating:4.0}]->m121
CREATE u1005-[:HAS_SEEN {rating:4.0}]->m11
CREATE u1005-[:HAS_SEEN {rating:5.0}]->m22
CREATE u1005-[:HAS_SEEN {rating:5.0}]->m122
CREATE u1005-[:HAS_SEEN {rating:4.0}]->m13
CREATE u1006-[:HAS_SEEN {rating:4.5}]->m14
CREATE u1006-[:HAS_SEEN {rating:4.5}]->m38
CREATE u1006-[:HAS_SEEN {rating:3.5}]->m22
CREATE u1006-[:HAS_SEEN {rating:4.0}]->m134
CREATE u1006-[:HAS_SEEN {rating:4.0}]->m63
CREATE u1006-[:HAS_SEEN {rating:5.0}]->m105
CREATE u1006-[:HAS_SEEN {rating:4.0}]->m77
CREATE u1006-[:HAS_SEEN {rating:4.5}]->m107
CREATE u1006-[:HAS_SEEN {rating:5.0}]->m98
CREATE u1006-[:HAS_SEEN {rating:3.5}]->m141
CREATE u1006-[:HAS_SEEN {rating:3.5}]->m122
CREATE u1006-[:HAS_SEEN {rating:3.5}]->m12
CREATE u1006-[:HAS_SEEN {rating:3.0}]->m11
CREATE u1006-[:HAS_SEEN {rating:4.0}]->m146
CREATE u1006-[:HAS_SEEN {rating:5.0}]->m13
CREATE u1006-[:HAS_SEEN {rating:5.0}]->m114
CREATE u1006-[:HAS_SEEN {rating:3.0}]->m24
CREATE u1006-[:HAS_SEEN {rating:4.0}]->m85
CREATE u1006-[:HAS_SEEN {rating:3.0}]->m120
CREATE u1006-[:HAS_SEEN {rating:3.0}]->m121
CREATE u1007-[:HAS_SEEN {rating:3.5}]->m14
CREATE u1007-[:HAS_SEEN {rating:5.0}]->m12
CREATE u1007-[:HAS_SEEN {rating:5.0}]->m98
CREATE u1007-[:HAS_SEEN {rating:3.5}]->m24
CREATE u1007-[:HAS_SEEN {rating:5.0}]->m13
CREATE u1007-[:HAS_SEEN {rating:4.0}]->m63
CREATE u1007-[:HAS_SEEN {rating:4.0}]->m105
CREATE u1007-[:HAS_SEEN {rating:4.0}]->m85
CREATE u1007-[:HAS_SEEN {rating:4.0}]->m38
CREATE u1007-[:HAS_SEEN {rating:3.5}]->m114
CREATE u1007-[:HAS_SEEN {rating:5.0}]->m77
CREATE u1007-[:HAS_SEEN {rating:4.0}]->m141
CREATE u1008-[:HAS_SEEN {rating:4.0}]->m13
CREATE u1008-[:HAS_SEEN {rating:4.0}]->m38
CREATE u1008-[:HAS_SEEN {rating:3.5}]->m11
CREATE u1008-[:HAS_SEEN {rating:3.0}]->m98
CREATE u1008-[:HAS_SEEN {rating:2.5}]->m114
CREATE u1008-[:HAS_SEEN {rating:2.5}]->m22
CREATE u1008-[:HAS_SEEN {rating:4.0}]->m121
CREATE u1008-[:HAS_SEEN {rating:4.0}]->m24
CREATE u1008-[:HAS_SEEN {rating:3.0}]->m120
CREATE u1008-[:HAS_SEEN {rating:4.5}]->m105
CREATE u1008-[:HAS_SEEN {rating:5.0}]->m122
CREATE u1009-[:HAS_SEEN {rating:4.5}]->m141
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m105
CREATE u1009-[:HAS_SEEN {rating:4.5}]->m13
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m14
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m120
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m38
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m121
CREATE u1009-[:HAS_SEEN {rating:4.0}]->m107
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m146
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m12
CREATE u1009-[:HAS_SEEN {rating:4.0}]->m63
CREATE u1009-[:HAS_SEEN {rating:4.5}]->m24
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m85
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m11
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m98
CREATE u1009-[:HAS_SEEN {rating:4.5}]->m122
CREATE u1009-[:HAS_SEEN {rating:5.0}]->m77
CREATE u1009-[:HAS_SEEN {rating:4.0}]->m134
CREATE u1009-[:HAS_SEEN {rating:4.0}]->m22
CREATE u1009-[:HAS_SEEN {rating:4.0}]->m114
CREATE u1010-[:HAS_SEEN {rating:5.0}]->m77
CREATE u1010-[:HAS_SEEN {rating:4.0}]->m122
CREATE u1010-[:HAS_SEEN {rating:3.0}]->m13
CREATE u1010-[:HAS_SEEN {rating:3.5}]->m38
CREATE u1010-[:HAS_SEEN {rating:5.0}]->m134
CREATE u1010-[:HAS_SEEN {rating:4.0}]->m121
CREATE u1010-[:HAS_SEEN {rating:3.0}]->m12
CREATE u1010-[:HAS_SEEN {rating:3.0}]->m98
CREATE u1010-[:HAS_SEEN {rating:3.5}]->m105
CREATE u1011-[:HAS_SEEN {rating:4.5}]->m122
CREATE u1011-[:HAS_SEEN {rating:2.5}]->m98
CREATE u1011-[:HAS_SEEN {rating:5.0}]->m121
CREATE u1011-[:HAS_SEEN {rating:5.0}]->m77
CREATE u1011-[:HAS_SEEN {rating:4.0}]->m14
CREATE u1011-[:HAS_SEEN {rating:5.0}]->m120
CREATE u1011-[:HAS_SEEN {rating:2.5}]->m11
CREATE u1011-[:HAS_SEEN {rating:5.0}]->m12
CREATE u1011-[:HAS_SEEN {rating:3.0}]->m114
CREATE u1011-[:HAS_SEEN {rating:2.5}]->m22
CREATE u1011-[:HAS_SEEN {rating:5.0}]->m63
CREATE u1011-[:HAS_SEEN {rating:4.5}]->m107
CREATE u1011-[:HAS_SEEN {rating:5.0}]->m24
CREATE u1011-[:HAS_SEEN {rating:5.0}]->m105
CREATE u1011-[:HAS_SEEN {rating:4.5}]->m13
CREATE u1011-[:HAS_SEEN {rating:4.0}]->m85
CREATE u1012-[:HAS_SEEN {rating:4.0}]->m141
CREATE u1012-[:HAS_SEEN {rating:5.0}]->m122
CREATE u1012-[:HAS_SEEN {rating:4.0}]->m105
CREATE u1012-[:HAS_SEEN {rating:5.0}]->m120
CREATE u1012-[:HAS_SEEN {rating:5.0}]->m121
CREATE u1012-[:HAS_SEEN {rating:3.0}]->m63
CREATE u1012-[:HAS_SEEN {rating:5.0}]->m22
CREATE u1012-[:HAS_SEEN {rating:2.0}]->m114
CREATE u1013-[:HAS_SEEN {rating:5.0}]->m122
CREATE u1013-[:HAS_SEEN {rating:5.0}]->m121
CREATE u1013-[:HAS_SEEN {rating:3.5}]->m105
CREATE u1013-[:HAS_SEEN {rating:4.0}]->m24
CREATE u1013-[:HAS_SEEN {rating:4.5}]->m85
CREATE u1013-[:HAS_SEEN {rating:5.0}]->m11
CREATE u1013-[:HAS_SEEN {rating:3.5}]->m22
CREATE u1013-[:HAS_SEEN {rating:3.0}]->m63
CREATE u1013-[:HAS_SEEN {rating:3.0}]->m98
CREATE u1013-[:HAS_SEEN {rating:5.0}]->m120
CREATE u1013-[:HAS_SEEN {rating:5.0}]->m13
----
=== Try other queries yourself!
//console
== Use Cases
MATCH m2:Movie<-[r2:HAS_SEEN]-u:User-[r1:HAS_SEEN]->m1:Movie
WHERE r1.rating >= 4.0 AND r2.rating >= 4.0 AND m1.name="Kill Bill: Vol. 1 (2003)"
with count(DISTINCT (u.name)) AS XandY
match u:User-[r1:HAS_SEEN]->m1:Movie
where m1.name="Kill Bill: Vol. 1 (2003)"
WITH count(DISTINCT (u)) AS X, XandY
RETURN (XandY*100)/X
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment