Para empresas que trabalham com publicidade online, mais precisamente DSPs e suas plataformas de Real-time Bidding é muito importante coletar a analisar informações a cerca do comportamento e interesses dos usuários enquanto navegam na internet. Sendo assim, descrevo nesse graph-gist uma abordagem básica que pode ser utilizada para analisar tais dados, considerando um determinado período de tempo e os produtos visualizados por cada usuário. Vamos considerar que alguns personagens de Breaking Bad navegaram na internet há alguns dias e encontraram alguns produtos, elementos químicos e, possuem interesse em comprá-los. Tal informação será de extrema importância no momento de dar um lance em um leilão de publicidade, sabendo o perfil e interesse de um determinado usuário. Então armazenamos tais usuários, produtos e datas das visualizações para que possamos extrair essas informações futuramente.
CREATE
(Walter { name:'Walter White' }),
(Skyler { name: 'Skyler White' }),
(Jesse { name: 'Jesse Pinkman' }),
(Hank { name:'Hank Schrader' }),
(Saul { name: 'Saul Goodman' }),
(Gus { name: 'Gustavo Fring' }),
(Br { name: 'Brom' }),
(K { name: 'Kalium' }),
(Ba { name: 'Barium' }),
(Zr { name: 'Zirkonium' }),
(Fe { name: 'Eisen' }),
(Al { name: 'Aluminium' }),
(Li { name: 'Lithium' }),
(Mn { name: 'Mangan' }),
(P { name: 'Phosphor' }),
Walter-[:INTERESTED_IN {day:1379732400000}]->Br,
Walter-[:INTERESTED_IN {day:1379732400000}]->Ba,
Walter-[:INTERESTED_IN {day:1380510000000}]->Fe,
Walter-[:INTERESTED_IN {day:1380510000000}]->Li,
Walter-[:INTERESTED_IN {day:1380510000000}]->P,
Skyler-[:INTERESTED_IN {day:1379732400000}]->Br,
Skyler-[:INTERESTED_IN {day:1379732400000}]->Ba,
Jesse-[:INTERESTED_IN {day:1379732400000}]->Br,
Jesse-[:INTERESTED_IN {day:1379732400000}]->Ba,
Jesse-[:INTERESTED_IN {day:1380078000000}]->K,
Jesse-[:INTERESTED_IN {day:1380337200000}]->Zr,
Hank-[:INTERESTED_IN {day:1380250800000}]->Fe,
Hank-[:INTERESTED_IN {day:1380337200000}]->Al,
Saul-[:INTERESTED_IN {day:1380423600000}]->Mn,
Gus-[:INTERESTED_IN {day:1380078000000}]->Br,
Gus-[:INTERESTED_IN {day:1380423600000}]->Ba,
Gus-[:INTERESTED_IN {day:1380337200000}]->Li,
Gus-[:INTERESTED_IN {day:1380250800000}]->P
Cypher, give me all users that are interested in some products after the day 1379451489693 (Tue Sep 17 2013). Here you should return all the users from my graph :)
START
u = node(*)
MATCH u-[r:INTERESTED_IN]->p
WHERE r.day >= 1379451489693
RETURN u.name as user, type(r) as relationship, p.name as product, r.day as day
Cypher, who are the users that are interested in some products between dates 1380078000000 and 1380250800000?
→ Here we should see the users: Jesse, Gus and Hank
START
u = node(*)
MATCH u-[r:INTERESTED_IN]->p
WHERE r.day >= 1380078000000 AND r.day <= 1380250800000
RETURN u.name as user, type(r) as relationship, p.name as product, r.day as day
Cypher, which users are interested at least in 3 products?
→ Here we should see the users: Walter, Jesse and Gus
START
u = node(*)
MATCH (u)-[:INTERESTED_IN]->(p)
WITH u as user, count(p) as products
WHERE products >= 3
RETURN user.name as Users
Cypher, which users are interested at least in 1 product and saw it after (Tue Sep 27 2013)?
→ Here we should see the users: Walter, Hank, Gus, Jesse and Saul
START
u = node(*)
MATCH (u)-[r:INTERESTED_IN]->(p)
WHERE r.day >= 1380250800000
WITH u as user, count(p) as products
WHERE products >= 1
RETURN user.name as Users
Cypher, what are the top 2 interesting products?
→ Here we should see the products: Br and Ba
START
u = node(*)
MATCH u-[r:INTERESTED_IN]->(p)
WITH p, count(r) as interested_users
RETURN p.name as Products, interested_users as Interested_Users
ORDER BY interested_users DESC
LIMIT 2
Cypher, has Walter White interest in product Eisen today (Tue Sep 30 2013)?
→ Here we should that Walter are interested
START
u = node(*)
MATCH u-[r:INTERESTED_IN]->(p)
WHERE u.name = 'Walter White' AND r.day = 1380510000000 AND p.name = 'Eisen'
WITH count(p) as products
RETURN products > 0 as Has_interest_in_Eisen
Dessa forma podemos extrair dados interessantes a respeito dos comportamentos e interesses de um grupo de usuários e de um único indivíduo. Essas informações podem ser levadas em consideração na hora de dar um lance em um leilão. Por exemplo, sabemos que Walter White possui interesse no produto Eisen, caso exista um espaço de publicidade em algum site relacionado a este produto, podemos aumentar o valor do lance no leilão pois há mais chances de Walter White comprar o produto do que alguém que ainda não o tenha visto.