Giter VIP home page Giter VIP logo

trafficanalysis's Introduction

##Traffic Analysis

####概要

数据集:宣城交通数据集(http://www.openits.cn/openData2/746.jhtml)

  • 交通拓扑(路段、路口)、路段旅行时间、路口车流量。数据量仅为1天。

研究思路:

  • 首先研究一条直线上的两个路口之间的因果影响情况,跑通实验,验证分析思路的正确性。
  • 其次选取几个流量较小的路口作为可能的cause,选取一个流量很大的路口作为effect,探究其中的因果关系与权重。

主要方法:

  • 主要参考论文:A.Fire and S.-C. Zhu. "Learning perceptual causality from video." ACM Trans. Intell. Syst. Technol., 7(2):23:1–23:22, 2016.
  • 大体思路:逐步构建因果树模型,刻画交通路口间的因果关系。
  • 构建模型的算法:
    • 选定因路口A、果路口B,并定义“因动作($$A$$)”、“果状态($$\Delta F$$)”及其0-1阈值。(可配图说明)
    • 将两个路口的交通数据看作一个大的视频,对其进行分片。片段的时长应大于从A到B的旅行时间(暂使用Dijkstra最短路算法计算)。
    • 对所有分片进行统计。真实数据中因果的共现概率分布为$$f$$,初始化当前模型共现概率分布$$h$$,$$p_0=p_A*p_{\Delta F}$$。
    • 模型构建的方法为:每轮迭代,增加一条信息增益(information gain)最大的因果边,使模型分布$$h$$以最大步长逼近真实分布$$f$$。
    • 停止条件:信息增益小于某个阈值。

已完成的尝试:

# TODO: 2. 考虑使用最新的VIP数据,如何更好地定义Action。 已和学长讨论
# TODO: 4. 让c_ssid支持多个“因”路口。 
# TODO: 6. 【实验】选取更多路口组合做实验 
# TODO: 8. 如何更科学地验证结果的合理性? 已和学长讨论,见“实验原则”
# TODO: 11. 尝试一下两个因路口的组合(三个路口不共线)。
# TODO: 13. 问一下车道编号的含义。 
# TODO: 14. 尝试一下把F变成多个方向的。效果好像并不好。。
# TODO: 15. 尝试把阈值的“平均值”改成白天的平均值或中位数,看怎么效果更好。(数据清洗)
# TODO: 16. 先找一些简单的路口,可验证算法的正确性。 
# TODO: 17. create_example代码如何修改,能更符合我们的问题? 
# TODO: 18. 5min粒度粗,按照论文方法生成origin_data往往time_lag里的动作数为0,如何解决-> make_origin_data时保留所有时刻的数据。

【尝试得到的结论】
对于唯一成功的HK-173 -> HK-83,数据清洗+中位数,效果不如不清洗+平均数。
尝试对“果路口”各方向的流量作为结果分别预测,效果并不如对“果路口”整体流量作为结果的预测好。
(改进点:)make_origin_data时,保留所有时刻的 time_tag|fluent|actions 数据,效果很好。(可能原因:解决了“TODO:18.”的问题)

create_examples非常关键,可以着重思考“到底应该如何分片更科学?”

【Future Work】
# TODO: 1. 可能需要考虑让Action、Fluent增加为0, 1, 2三种取值,或更多——变身预测问题
# TODO: 3. 改进为:根据路口和拓扑(roadid_traveltime),自动生成阈值参数(现在默认是取平均值作为阈值)
# TODO: 12. 信号灯作为挑选路口的依据(不要随便通行的)。
# 如果有更多的更完整数据集,可以对不同的时间段分别学习因果边,探究早晚高峰的不同规律
# 数据记录实时性不足:每5分钟才统计一次车流量、旅行时间,而大多数相邻路口间的车程不足5分钟。

待完成的尝试:

  • 问转发邮件的来源【OK】

    【实验原则】

    较近节点:评价模型是否有效(粗略,直观)——尽量找相邻的点 较远节点间:可以作为因果关系的预测、分析、解释 一对节点:研究互相的因果,谁更为因?

    画图

    causal effect标记(加一个波动,变化小的可以连续画×,或特殊标记) 人为根据直观理解来标记。可每次画两个图,或者画两条折线。

    后续实验(改进点): 1.带权重:给IG一个权重??另一思路见草稿纸【OK!】 不带权重 看预测结果是否一样

    2.尝试算法:【OK】 找到动作A1相关的因果边后,就不再考虑A1的其他因果边 (改算法,效果不好就改结果:只取概率最大的A1的因果边作为预测结果)

    3.实验:【OK】 明显不会影响的方向可以不放入Action的考虑

合理:

  • 写实验结果时,既要写验证算法正确性的:相邻的路口;又要写那种“距离很远的,学出的因果关系可以解释、给人们提供新的信息的”案例。

####tally.py:初步数据统计

  • ssid_volume():统计各路口各方向一天内的总流量、平均流量
  • roadid_traveltime():统计各路段的平均旅行时间、平均路程
  • direction_volume():统计要研究的路口各方向的车流量,每5分钟为一个时间段(可能需要plot绘直方图,辅助确定F、A的阈值的选取,继而定义F、A)
  • make_origin_data()(暂时是取平均值作为流量阈值参数,或直接人为设定,后应改为更加科学、统一的自动阈值设定):生成每一行为 “time | fluent | actions” 格式的 origin_data.csv,保证相邻两行的各对应值不完全相同
  • find_path_return_travel_time():输入目标路口id和“因”路口id,输出两者间的旅行时间。暂时使用了Dijkstra算法找最短路的时间,后应考虑如“最短的三条路径的加权平均”等

####learning.py:分析数据,学习因果关系

  • create_examples_with_prev_fluent()(后单独写在一个.py文件中):

    • 从time | fluent | actions 的origin_data到“关键帧”: fluent | actions | prev_fluent
  • pursuit():通过迭代,逐渐构建因果边,返回构建的因果树结果。

####中期汇报

  • 算法框架√
  • 实验数据√
  • 实验结果
    • 好结果的图(已验证算法的正确性,说明可能在别的复杂路口亦有一定适用性)
    • 坏结果的图(口头分析原因,考虑多种可能)
    • 需解释图中含义:绿点表示因果边$$A \rightarrow \Delta F$$满足$$P(\Delta F\ |\ A)>P(\Delta F\ |\ \overline{A})$$
    • 需在图上标记best action和best fluent change,或者做一个表格
  • 后续工作
    • 实验后续:考虑数据清洗,尝试更多的路口组合,并调整阈值参数
    • 算法改进:
      • 分片时长的确定:考虑多条路径
      • 共现概率的定义:考虑对不同远近路口的加权
      • 进一步思考和改进核心迭代算法

####待研究问题

  • causal_effect值的含义?(与学长讨论)【OK】
  • 如果A、B路口间有多条路径,或者在一天中的不同时间,它们之间的time delay(平均行车时间)是变化的
    • 问题1:难以确定分片的标准(可以取max?取前三条最短路径再加权平均?)
    • 问题2:如果算法发现A对B有影响,怎么确定A对多少分钟后的路口B有影响?(重要,如果解决了,就可以做预测问题)
  • 多个路口对一个路口的影响:【OK】
    • 代码拓展【OK】
    • 把RF的定义从平均变为加权,应该怎么写?【OK】
  • 讨论

实验记录:

见result_recorder.txt。

####论文要求

  • 参考文献至少要有20来篇
  • 图表要清晰
  • 至少要50页

####图层的使用

  • 打开ArcGIS官网的Free Trial(http://www.esri.com/arcgis/trial)
  • 注册账号
  • 打开ArcGIS for Developers界面,添加新的Layer,一顿瞎设置
  • 在Dashboard / Layers 界面右边点击“Open in Mar Viewer”,进入“我的地图”界面
  • 在“我的地图”界面左上角点击:添加→从文件添加图层,即可导入文件中的“含shape文件的zip包”

trafficanalysis's People

Contributors

victorssoda avatar

Stargazers

 avatar  avatar

Forkers

amoliu

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.