如何在Neo4j
中为这类数据建模?:
> HOLDINGS
Portfolio Holding Instrument Date BALANCE.USD
1 ABC Stock 1 Share Class A Stock 1 2013-12-31 25360291
2 ABC Stock 1 Share Class A Stock 1 2014-01-31 25302011
3 ABC Stock 1 Share Class B Stock 1 2013-12-31 12264011
4 ABC Stock 1 Share Class B Stock 1 2014-01-31 12893201
5 DEF Fund 1 Share Class EUR Series 1 Fund 1 2013-12-31 21012222
6 DEF Fund 1 Share Class EUR Series 1 Fund 1 2014-01-31 21632101
7 DEF Fund 1 Share Class EUR Series 2 Fund 1 2013-12-31 8214325
8 DEF Fund 1 Share Class EUR Series 2 Fund 1 2014-01-31 8292630
9 DEF Portfolio ABC Account Portfolio ABC 2013-12-31 155364592
10 DEF Portfolio ABC Account Portfolio ABC 2014-01-31 156202162
> FACTORS
Instrument Factor ExposureStrength
1 Stock 1 North America: US 1.00
2 Stock 1 Industrials 1.00
3 Fund 1 Liquidity: Low 0.05
4 Fund 1 North America 0.70
5 Fund 1 Europe: Eurozone: Germany 0.20
6 Fund 1 Industrials : Capital Goods: Building Products 0.25
为了给出一点叙述,投资组合投资于具有时变值的不断变化的工具集(股票,债券,其他投资组合......)。这些工具反过来对因素很敏感,这些因素可以是等级的,例如行业(e.g. GICS classification),地区/国家,大小等。虽然它没有反映在上面的FACTORS
表中,ExposureStrength
也可能随时间而变化。
然后将每个因素的投资组合风险计算为Balance * ExposureStrength
。目的是随后通过不同的因子集聚合或切片和切片曝光。
我还不是Neo4j
的用户,但考虑学习Cypher
查询语言,所以对于不发布可重复的示例表示歉意。很奇怪Cypher
这些问题的片段有多复杂。
答案 0 :(得分:2)
您可以通过创建一个与具有日期引用的项目组合和工具连接的HoldingBalance节点来建模时间差异,该日期引用具有:NEXT关系并且同时锚定在时间树中以便快速访问子序列。
这样的事情:
(Portfolio)-->(Holding)<--(Instrument)
|
v
(HoldingBalance)<-[:NEXT]-(HoldingBalance)-->(day)-->(month)-->(year)
同样适用于因素
(Factor)-->(Exposure)<--(Instrument)
|
v
(ExposureStrength)<-[:NEXT]-(ExposureStrength)-->(day)-->(month)-->(year)
我开始将其建模为图形要点,但尚未完成: