Twitter Shares Climb, as Tweaks to Site Drive Higher Profits

The social-media company’s net income more than tripled to $191 million in the first quarter

“They’re doing what they’re supposed to do,” said Wedbush analyst Michael Pachter. “They’re growing revenue and controlling operating expenses.”

Central to Twitter’s changes is an effort to promote healthy discourse, after the company has struggled to rein in toxic behavior. It has also been working to make the platform more conversational.

Twitter Chief Executive Jack Dorsey told analysts Tuesday that the company is now taking a more proactive approach to addressing abuse and its effects on the platform.

It has made changes that are “taking a bunch of the burden away from the victims of abuse and harassment on our service and we’re making the agents that we have working on this process much more effective and much more efficient,” Mr. Dorsey said.

Earlier this month, Twitter announced that it was using machine learning algorithms to proactively surface abusive tweets to its teams for review. Previously, Twitter users had to flag offending tweets before the company would remove them. Now, about 38% of abusive content that Twitter takes down is surfaced by the algorithms.

This isn’t the first time Twitter has used machine-learning technology, but previously it was applied to tracking spam.

Twitter is also now using a new appeals process to better prioritize tweets it should remove that contain private information about its users. Twitter now removes 2.5 times more tweets that share personal information since the launch of this feature.

For Twitter’s business, trying to reduce abuse and negative content can cut both ways. In previous quarters, declines in user accounts were attributed in part to efforts to purge more of the spam and accounts that violated Twitter’s rules.

Still, a platform with less abuse could retain more users and assuage marketers’ fears about advertising alongside offensive tweets.

.. Twitter is now working to make its platform more conversational. The company is testing a new version of its app, called twttr, that threads message replies in a more intuitive design that makes it easier to follow discussions.

The company also plans to start experimenting with ways to give people more control over their conversations by giving users the option to hide replies to their tweets.

Twitter also made other tweaks to its platform in the quarter that helped drive more people to its app and bolster the effectiveness of ads, including refining its algorithm to show users more personalized tweets and adjusting the size of its video player.

“We intend to move much faster” to improve the user experience, Mr. Dorsey said. Twitter is “heading in the right direction, but we still have some work to do.”

The company expanded its head count in the first quarter to about 4,100, from about 3,900 the previous quarter.

Twitter projects revenue to also increase, to between $770 million and $830 million for the second quarter.

Gmail, machine learning, filters

We’ve gotten to the point, particularly with Google but also with the other webmail providers, where the bulk of egregious spam is blocked. What’s left is not some spammer sending 10MM messages, but a much more difficult problem. Spam that reaches the inbox is sent in much smaller quantities. It’s also heavily targeted. Spammers are trying to look like legitimate marketers but still sending mail without permission.

This targeted spam is something I’ve been thinking about a lot lately. Mostly because anti-spammers did a pretty good job making not-spamming look like it was beneficial to senders. Many deliverability recommendations boil down to stop spamming but phrased in a way that makes the advice more palatable. Much of the type of spam that’s getting caught in the new filters follows deliverability recommendations. The piece it misses is that it’s not being sent with the permission of the recipient.

.. Believe it or not, spam filters started out as protecting users from mail they didn’t ask for. As the internet as grown and email has become a channel for crime the focus of filters have changed. But, fundamentally, deep down, the original purpose of keeping mail boxes useful by stopping unsolicited mail is still there. The ML filters are giving Google, and others, tools to actually address that mail better.


Every person that reads newspapers, magazines or any other media of general interest has at least a basic idea of what Machine Learning is. And this is not only a fashion, Machine Learning is already part of our everyday life and will be much more in the future: from personalized advertisement on the Internet to robot dentists or autonomous cars, Machine Learning seems to be some kind of super power capable of everything.


But, what is Machine Learning really? It is mainly a set of statistical algorithms that, based on existing data, are capable of deriving insights out of them. These algorithms are basically divided into two families, supervised and unsupervised learning. In supervised learning, the objective is to perform some kind of prediction, such as, for example, if an e-mail message is spam or not (classification), how many beers will be sold next week in a supermarket (regression), etc. Unsupervised Learning, on the contrary, focuses on answering the question how are my cases divided in groups? What these algorithms do (each of them with their particularities) is to bring similar items as close as possible and keep items that differ  from each other as far as possible.

Step 3: Kmeans in PostgreSQL in a nutshell

Functions written with PL/Python can be called like any other SQL function. As Python has endless libraries for Machine Learning, the integration is very simple. Moreover, apart from giving full support to Python, PL/Python also provides a set of convenience functions to run any parametrized query. So, executing Machine Learning algorithms can be a question of a couple of lines. Let’s take a look

CREATE OR replace FUNCTION kmeans(input_table text, columns text[], clus_num int) RETURNS bytea AS


from pandas import DataFrame
from sklearn.cluster import KMeans
from cPickle import dumps

all_columns = “,”.join(columns)
if all_columns == “”:
all_columns = “*”

rv = plpy.execute(‘SELECT %s FROM %s;’ % (all_columns, plpy.quote_ident(input_table)))

frame = []

for i in rv:
df = DataFrame(frame).convert_objects(convert_numeric =True)
kmeans = KMeans(n_clusters=clus_num, random_state=0).fit(df._get_numeric_data())
return dumps(kmeans)

$$ LANGUAGE plpythonu;