Analysis of Timing of Upvote Bot Use

in #utopian-io6 years ago (edited)

The timing of the use of upvote bots has been a high profile issue on the Steem blockchain over the last month. The user @grumpycat has launched a campaign to reduce the duration over which bot promotion can be used on a post - with a cut-off of 3.5 days out of the full 7 day voting period.

In this study I will examine the timing of upvote bot use for posts created on two separate days, one prior to the campaign, the second a month later after the campaign had reached full swing, with the aim of analysing how the timing of upvote bot usage has changed.

timing bots.png

0 Summary of Findings and Conclusions

I start by presenting the summary of findings for readers who have limited available time. The full details of the analysis are included in the later sections of this article.

0.1 Upvote bot timing for 18 December 2017

The charts below summarise the value of all upvotes made on posts (not comments) created on 18 December 2017. The full seven day voting period for these posts is prior to the campaign to reduce the upvote bot promotion period - this campaign began at the end of December:

The first chart is segmented by hour across the seven day voting period (7 days * 24 hours = 168 hours).

Screen Shot 2018-01-27 at 20.51.51.png

  • The light green bars are upvotes, the light red bars are downvotes and the dark green bars are upvote bot upvotes.
  • Only auction bot style upvote bots are included in this analysis. “Fixed return” upvote bots such as minnowbooster are not covered by this study. The list of auction bots was obtained through a search of steemsql cross-referenced with the steembottracker website.
  • All amounts shown are in “rewards units” as shown on the Steemit interface, i.e. without translation into Steem Power or applying the market price of Steem Based Dollars.

On the left of the chart we see an initial burst of upvote bot usage in the first three hours (note that the total upvote values for the first three hours do not fit on the chart, with values in the first hour alone exceeding 50,000.)

The first few hours are the key period for pushing a post onto the hot or trending pages of the steem blockchain. With a large proportion of overall voting occurring in the first hour this is likely to be the most opportune moment to engage in post promotion.

Some much smaller upvote bot volumes are also visible in the first twelve hours.

On the right hand side of the chart, the second significant period of upvote bot usage is from hour 120 (i.e. the start of day 5) to hour 156 (the end of the upvoting period at day 6.5).

There is a long quiet period between day 1 and day 5 where very little upvote bot voting happens at all.


This second chart groups the same data by day rather than by hour. This gives a better illustration of the overall scale of upvote bot voting in comparison to overall upvotes and the distribution across the seven days.

Screen Shot 2018-01-27 at 21.57.48.png

Whilst the upvote bot overall vote values are higher on the first day, they are also significant on days 6 and 7 and a much higher proportion of the overall upvoting on those days.


Finally this third chart looks only at the first hour, segregated by minute.

Screen Shot 2018-01-28 at 13.30.37.png

This gives a better idea of the overall scale of the upvote bot usage as well as an indication of timing in relation to the thirty minute reverse auction period during (or at the end of which) a large proportion of a user’s followers upvote.

Given the nature of the auction windows for upvote bots, which vote only once every 2.4 hours, it is not possible for the user to obtain a precise delivery for the upvote. Clearly there are some users aiming for the upvote to arrive within the first thirty minutes. From the data it is not possible to ascertain a clear pattern of whether there are also people aiming for the upvote to arrive a short time after the 30 minute period, although from the first chart we can see many users obtaining upvotes in the second or third hour.


0.2 Upvote bot timing for 18 January 2018

Now let’s look at the picture exactly one month later on January 18 2018.

The charts below summarise the value of all upvotes made on posts (not comments) created on 18 January 2018. This date is after the campaign has been in action for around three weeks. The full seven day voting period takes us up to 25 January 2018, close to the date of this study.

All charts are produced on a consistent basis with those above for 18 December 2018.

The first chart is segmented by hour across the seven day voting period (7 days * 24 hours = 168 hours).

Screen Shot 2018-01-28 at 13.53.43.png

There are two clear changes in comparison to the 18 December chart:

  • The second significant period of upvote bot usage is now in the middle of the chart rather than on the right hand side. It has moved from hours 120 - 156 (i.e. the start of day 5 to the end of the upvoting period at day 6.5) to hours 60 - 84 (i.e. day 2.5 to day 3.5). There is a small amount straggling on through day to the end of day 4 ending around hour 100.

  • The initial burst of upvote bot usage on the left hand side of the chart is now much larger (although again note that the total upvote values for the first four hours do not fit on the chart, with values in the first hour alone exceeding 50,000.)


This second chart groups the same data by day rather than by hour. This gives a better illustration of the overall scale of upvote bot voting in comparison to overall upvotes and the distribution across the seven days.

For January 18 I have split day four into two halves - the period up to 3.5 days and the period after 3.5 days.

Screen Shot 2018-01-28 at 14.49.19.png

In comparison to the December 18 chart the upvote bot voting has all but disappeared in day 6 and day 7. The amount on day 5 has reduced but there remain small amounts on day 5 and the second half of day 4.

Overall the amount of auction bot upvoting outside the 3.5 day period has reduced to 10% for posts created on January 18. This is from a starting point of over 50% for December 18.


0.3 Conclusions

The amount of auction bot upvoting after the 3.5 day cut off has clearly reduced, from over 50% of the total bot upvotes down to 10%.

Whilst it is not possible to state conclusively from the study, it appears that this upvote bot use has moved from hours 120 - 156 (i.e. the start of day 5 to the end of the upvoting period at day 6.5) to hours 60 - 84 (i.e. day 2.5 to day 3.5).

What are the advantages of purchasing upvotes late in the seven day voting window - why does it happen?

There are a couple of obvious advantages of a late upvote:

  • Users may upvote low quality posts leaving limited time for these posts to be recognised and downvoted. There can be small profits and benefits to reputation from such upvotes.

  • The conversion of post payouts into SBD and Steem Power is based upon a 3.5 day median average of the witness price feeds. This averaging period is employed to allow other witnesses time to react to the possibility of a rogue witness manipulating its price feed. Conversions of SBD to Steem (i.e. redemptions - not conversion through the internal market) also use a 3.5 day delay to prevent users from benefitting from knowledge of the market price which moves faster than the median average. The use of upvote bots close to post payout potentially allows users to convert between SBD and Steem at more favourable rates than that available in the market - effectively abusing the 3.5 day averaging process.

The removal of these potential abuses through the reduction of the post promotion period does appear a favourable change for the steem blockchain.


However the campaign does highlight one weakness of the Proof of Stake system: that a single user with sufficient power can have a significant influence over behaviour based on their own views.

Taking a hypothetical example, a user with a large amount of resources (say an institution or government with $50m) and devious intentions could buy into steem (over a period of time) and wield their significant power to the detriment of the community: for example by downvoting any articles that did not fit with their own political views. It would take significant coordination from other users to oppose such activity, coordination that comes at a cost to the reacting users through the use of their own stakes - effectively “pay to oppose”. Such opposition is - by its costly nature - difficult to organise.

Fortunately as the steem price rises and the amount of steem in circulation grows, the cost of buying steem to carry out such potentially devious behaviour also grows rapidly. With the power down of the Steemit account also leading to increased dispersal of Steem among users, with time this risk should lessen.


Outline

0 Summary of Findings and Conclusions (see above)
0.1 Upvote bot timing for 18 December 2017
0.2 Upvote bot timing for 18 January 2018
0.3 Conclusions
1 Scope of Analysis
2 Tools Used
3 Scripts


1 Scope of Analysis

The analysis is based on the data for all user accounts active on two specific dates (December 18 2017 and January 18 2018) with an additional separation of the auction upvote bots.

The data has been obtained through SQL queries of SteemSQL, a publicly available Microsoft SQL database built and maintained by @arcange and containing all the Steem blockchain data.

The upvote bot data has been separated from the overall Steem blockchain data by use of the TxVotes.voter column and a list of the main upvote bots. The list of auction bots was obtained through a search of steemsql cross-referenced with the steembottracker website.

The data has been filtered by date using the timestamps in the respective tables.


2 Tools Used

Valentina Studio, a free data management tool, was used to run the SQL queries. The raw data was then verified and analysed in the spreadsheet application of the LibreOffice office suite.

Graphs and charts were produced using Numbers, the Mac spreadsheet tool.

SQL scripts are included at the end of this analysis.


Summary of Findings

Analysis findings have been included in the Summary of Findings at the start of the report.


6 Scripts

The script required to run this analysis is very long and is based on nested queries of the Comments and TxVotes tables. I have included a redacted version below so this analysis is not unnecessarily long - and added comments to explain how it works - if there are any further questions just ask!


// OUTER QUERY PERFORMS GROUPING BY TIME //

SELECT
    datepart(hour, x.CommentsCreated) as [HourOfCreation],
    datediff(mi, x.CommentsCreated, TxVotes.timestamp) as [TimeOFVote],
    count(TxVotes.voter) as [CountOfVoters], 
    sum(x.VoteRshares) as [SumOfNetRshares],
    sum(abs(x.VoteRshares)) as [SumOfAbsRshares],
    sum(x.BidBotRshares) as [CountOfBidBotVoters],
    sum(x.BidBotVoters) as [SumBidBotVoteRshares]

FROM (

// INNER QUERY FINDS MOST RECENT VOTE AND RSHARES //


SELECT 
       TxVotes.voter, 
       TxVotes.author, 
       TxVotes.permlink, 
       Comments.created as [CommentsCreated],
       datepart(hour, Comments.created) as [HourOfCreation],
       convert(real,IIF(CHARINDEX(Concat(':"',TxVotes.voter,'",'), Comments.active_votes)>0, 
// redacted - extraction of rShares // AS [VoteRshares],
// redacted - extraction of bid bot rShares // AS [BidBotRshares],
      case when TxVotes.voter in ( // redacted - list of bid bots // ) then 1 else null end as [BidBotVoters], 
       Max(TxVotes.id) as [MaxId]
       
       FROM TxVotes (NOLOCK)  
             INNER JOIN Comments (NOLOCK)
                 ON TxVotes.permlink = Comments.permlink
                      AND TxVotes.author = Comments.author
            
       WHERE
                Convert(date, Comments.created) = '2017-12-18' AND
                TxVotes.timestamp >= Comments.created and
                depth = 0
                           
      GROUP BY 
              // redacted - the same items as listed above in SELECT //

                 
             ) AS x 


INNER JOIN     
    TxVotes (NOLOCK) 
        ON TxVotes.id = x.MaxId


   
GROUP BY
     datepart(hour, x.CommentsCreated),
     datediff(mi, x.CommentsCreated, TxVotes.timestamp)

That's all for today. Thanks for reading!



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Thank you for the contribution. It has been approved.

Hi @minitature-tiger, that's an interesting topic! I think the fact that votes that were bought at day 5-6 before now moved to day 3 is not a big surprise, because most of the bots leave no choice. What's I didn't expect is that there was a clearly increased use of bots near days 5-6 before and moved now to day 3. Those votes are likely RoI, and not visibility-motivated. I'm curious to know if those have different signatures (text length, or image/video only, ...) compared to the earlier boosted posts.

You can contact us on Discord.
[utopian-moderator]

Hey @crokkon.

Yes, you are right. The really interesting part is just how much late upvote use there was - over half of all use in relation to posts created on that day. I didn't get any stats on the individual use, just the groupings - but it would be interesting to, say, compare early upvote posts and late upvote posts for text length like you say.

Thanks for the swift moderation too! Keeping your stats up!

Hey @crokkon, I just gave you a tip for your hard work on moderation. Upvote this comment to support the utopian moderators and increase your future rewards!

Totally awesome! I was wondering out of you, @crokkon, or @paulag would put this together!

So the campaign seems to have worked in some regard. The earlier votes may also be arriving due to many bots switching to the 3.5 day policy and returning sends.

What I really don't like is huge early votes where the user has delayed posting to time a bid-bot to hit the post on the first 5 minutes. This is negative to the bots curation (oh well!), but also negative to everyone else's reward (i'm quite sure). It totally puts me off voting when I see a post at 50-100 or more after 5 minutes.

Great work, worthy of an RS.

Cheers!

So the campaign seems to have worked in some regard.

I'm not soo sure - would you notice a boost on a post that is 3 or 5 days old? I probably wouldn't in both cases. And if it is low quality, does someone actually "correct" the rewards? At least gives more time to report abusers have maybe have the bot revert its vote... Is this done by users?
I think I already got ideas for 3 more analysis posts by just writing this... ;)

No perhaps not. The bot owners who have reduced the vote period have 'helped' with the numbers. I would hope the the cat and co. Are finding the crap as was the plan.

I don't think bots reverse the vote.

And I'm glad to hear you have more analysis planned!

I think it resolves one issue, which is potentially taking advantage of the 3.5 day averaging, even if that may not be the main driver for most late upvoters.

Some of the bot owners are also working on quality constraints - so the extra time could give them the ability to work through any action they think necessary. This may be an area Analysis / Utopian could assist with in general - automated systems to find abuse. As long as you can define what abuse is!

Thanks Asher!

Yes, I think getting the agreement of the bot owners to the new policy meant that the change over the month isn't so much a surprise. But I found the scale of the late voting really quite surprising.

Huge early votes can be a big gamble. It can put people off as you say. But if a whale sees your post on trending then your luck could be in. It's a little bit all or nothing in approach.

Cheers for the resteem!

It’s funny, I’ve been musing over this very concept myself over the past weeks:

Taking a hypothetical example, a user with a large amount of resources (say an institution or government with $50m) and devious intentions could buy into steem (over a period of time) and wield their significant power to the detriment of the community: for example by downvoting any articles that did not fit with their own political views.

We’ve seen evidence of the difficulty for the community to have an impact on some high value wars on rewards. We all know the example.

I extrapolated this to nefarious individuals deciding they wanted to control a social media ecosystem. There’s a lot of cash rich people in this world, there’s a lot of crypto rich people in this world. Any one could decide to wage a personal war if they wished and there is little in terms of mechanism to stop them.

There is a lot of championing over the concept of decentralised social media. The reality is that the structures are in place to allow those with money to centralise to their purposes, to a degree.

Another user said to me that this is where SMT hard forking may come in to play, as communities decide to opt out from whatever political battle is deciding to be waged. So there is that at least, as it has been shown on other networks that there are those who absolutely love to monetise populism, and it won’t be too long before they notice that they can transfer that rather negative energy over here.

Really good point on the SMTs @fourfourfun. I can see that working both ways though (depending on how well the communities functionality separates groups of users).

You could easily imagine SMTs being set up to reward users for putting forward certain views, or for sharing certain posts. Comments boards in mainstream media are already (I believe) swamped by paid-for commentators. Now you have a system which allows you to reward anyone for doing this work, rather than having to hire people specifically.

thanks for sharing your article will help me in future

Thank you for your 100% upvote @samreenfarooq! Much appreciated.

your hypothetical example with a large amount of resources in one hand is scary. I'm afraid it is impossible to prevent such scenario happening.

Anyway, thank you. It's very informative to me.

No problem @palik. Thanks for reading!

Thanks for the detailed analysis!

Thank you for reading @naditinkoff. And for your upvote!

@miniature-tiger, Contribution to open source project, I like you and upvote.

Excellent analysis. Thank you and well done.

Sometimes the end justifies the means, but the coercion and threat of attack that has brought about this change still doesn't quite sit right with me.

Hey @miniature-tiger I am @utopian-io. I have just upvoted you!

Achievements

  • Seems like you contribute quite often. AMAZING!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.029
BTC 56263.97
ETH 2964.97
USDT 1.00
SBD 2.18