Giter VIP home page Giter VIP logo

temporal-gcn-lstm's Introduction

temporal-gcn-lstm

Code for Characterizing and Forecasting User Engagement with In-App Action Graphs: A Case Study of Snapchat

Temporal-gcn-lstm model encodes temporal evolving action graphs to predict future user engagement. The end-to-end, multi-channel neural model also encodes acitivity sequences and other macroscopic features to reach best performance.

Requirements

DGL, NetworkX, PyTorch, Pandas, Numpy, SciKit-Learn, tqdm

Deep Graph Library (DGL) https://www.dgl.ai/

Pytorch https://pytorch.org/

Building action graphs

build_graphs.py: build static graphs for time period

build_temporal.py: build temporal graphs per day

python3 build_graphs.py INPUT_PATH OUTPUT_PATH

python3 build_temporal.py INPUT_PATH OUTPUT_PATH

Models

utils.py: supporting functions

activity_seq_model.py: baseline activity sequence model

gcn_model.py: model structure of our graph convolutional network

multi_channel.py: To run our final best performance temporal graph model

To Run

python3 multi_channel.py

Load custom data with df_path graphs_path macro_path flags

Set variants of model with --activity --macro flags to inlcude or leave out these information. ex. --activity False. Default for both are True for best enhanced performance of model.

Hyperparameters were set to optimal for our dataset, they can be modified as input arguments.

Cite

@inproceedings{liu2019characterizing,
  title={Characterizing and forecasting user engagement with in-app action graph: A case study of snapchat},
  author={Liu, Yozen and Shi, Xiaolin and Pierce, Lucas and Ren, Xiang},
  booktitle={Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery \& Data Mining},
  pages={2023--2031},
  year={2019}
}

temporal-gcn-lstm's People

Contributors

shanzhenren avatar yliu2-sc avatar yozenliu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

temporal-gcn-lstm's Issues

df_path,macro_path

I have some confuse about these two files.
Are they .pkl file?
What are the contents of this file
I will appreciate for your reply.Thanks

Action Graph

Do we have a code in this repo for making an action graph with its probabilities calculation on its edges? (Like Fig1 and Fig3 in your paper)

mock_data seem to be empty

Thank you so much for sharing these codes. However, I was trying to run the multi_channel.py script. All seem to be okay except that the graph_data in the path "mock_data/example_temporal_user_action_graphs.pkl", when loaded, the graphs are empty (zero nodes).

It could be the way I loaded the nx DiGraphs is not correct,

I have used the following,

parser.add_argument('--df_path', type=str,default='mock_data/example_df.pkl')
parser.add_argument('--macro_path', type=str,default='mock_data/example_macro_df.pkl')
parser.add_argument('--graphs_path', type=str,default='mock_data/example_temporal_user_action_graphs.pkl')

Then I tried three types of loading pickled graphs:

1 - graphs_sep = pickle.load(args.graphs_path)
This gives an error "*** TypeError: file must have 'read' and 'readline' attributes"

2 - from networkx.readwrite.gpickle import read_gpickle
graphs_sep = read_gpickle(args.graphs_path)
This seems to read the graph dict of [2 x7] correctly. But when converting the nx_graph to dgl, the graphs are empty. *** networkx.exception.NetworkXError: Graph has no nodes or edges

3-

with open(args.graphs_path, 'rb') as f:
        graphs_sep = pickle.load(f)

This also correctly reads the graph dict. However, same error is produced. *** networkx.exception.NetworkXError: Graph has no nodes or edges

activity sequence

Hi,
In the multi_channel.py module one of the inputs is:

Input datasets
    df: dataframe with userid as index, contains labels, and activity sequence if needed

I am having trouble to understand how exactly would the activity sequence would look like in a dataframe.
can you maybe provide an example?

thank you!

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.